Apache:使用正则expression式来代理内部URL

我有几个servlet监听内部端口,这些内部端口不能从外部访问。 我使用Apache的ProxyPassProxyPassReverse指令从端口443安全地提供服务:

 ProxyPass /media http://localhost:9002/ ProxyPassReverse /media http://localhost:9002/ 

这工作正常 – 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 

但是这种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在线文档中查找更多详细信息。