我有几个servlet监听内部端口,这些内部端口不能从外部访问。 我使用Apache的ProxyPass和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
但是这种configuration导致浏览器中的Bad Request和
Invalid URI in request GET /image/1 HTTP/1.1
在日志中。
如何在代理URL内容各不相同的内部servlet?
您使用ProxyPassMatch代替:
ProxyPassMatch ^/media http://localhost:9002/(.*) ProxyPassReverse ^/media http://localhost:9002/(.*)
在Apache在线文档中查找更多详细信息。