我有几个 servlet 在监听无法从外部访问的内部端口。我使用 ApacheProxyPass
和ProxyPassReverse
指令从端口 443 安全地为它们提供服务:
ProxyPass /media http://localhost:9002/
ProxyPassReverse /media http://localhost:9002/
这工作正常 -https://example.com/media
由 提供http://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
但这种配置会导致Bad Request
浏览器和
Invalid URI in request GET /image/1 HTTP/1.1
在日志中。
如何代理 URL 具有变化部分的内部 servlet?
答案1
你ProxyPassMatch
可以使用:
ProxyPassMatch ^/media http://localhost:9002/(.*)
ProxyPassReverse ^/media http://localhost:9002/(.*)
更多详细信息请访问Apache 在线文档。