Apache:使用正则表达式代理内部 URL

Ada*_*tan 2 mod-rewrite mod-proxy apache-2.2

我有几个 servlet 侦听无法从外部访问的内部端口。我使用 ApacheProxyPassProxyPassReverse指令从端口 443 安全地为它们提供服务:

ProxyPass         /media http://localhost:9002/
ProxyPassReverse  /media http://localhost:9002/
Run Code Online (Sandbox Code Playgroud)

这工作正常 -https://example.com/mediahttp://localhost:9002/.

当 URL 具有不同部分时会出现问题。例如:

https://example.com/image/IMAGE_NAME_1应该从http://localhost:9002/image/IMAGE_NAME_1.

并且https://example.com/image/IMAGE_NAME_2应该从http://localhost:9002/image/IMAGE_NAME_1.

我尝试了一些变化,包括:

RewriteEngine  on
RewriteRule   ^/image/(.*)$  http://localhost:9002/image/$1 [L,PT]
ProxyPass         /image/ http://localhost:9002/image
ProxyPassReverse  /image/ http://localhost:9002/image
Run Code Online (Sandbox Code Playgroud)

但是这种配置会导致Bad Request浏览器和

Invalid URI in request GET /image/1 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

在日志中。

如何代理 URL 具有不同部分的内部 servlet?

daw*_*wud 14

ProxyPassMatch改用:

ProxyPassMatch    ^/media http://localhost:9002/(.*)
ProxyPassReverse  ^/media http://localhost:9002/(.*)
Run Code Online (Sandbox Code Playgroud)

Apache 在线文档中查找更多详细信息。