如何代理上下文到不同的后端上下文在Apache

我想configurationapache,以便http://my-domain.com/myapp提供在后台服务器上运行CherryPy的Python webapp。

以下是虚拟主机中的内容:

RewriteRule ^/myapp/?(.*) http://backend-server:8000/$1 [P] ProxyPassReverse /myapp/ http://backend-server:8000/ 

当我追踪请求/响应时,我看到:

 GET /myapp HTTP/1.1 Host: my-domain.com 

接着:

 HTTP/1.1 303 See Other Date: Thu, 15 Sep 2011 21:46:35 GMT Server: CherryPy/3.1.2 Content-Type: text/html;charset=utf-8 Location: http://my-domain.com/somwhere-else/ 

正如你所看到的,CherryPy webapp发送303redirect到/ somewhere-else /

任何想法为什么Apache ProxyPassReverse不会将位置转换为http://my-domain.com/myapp/somewhere-else

您的源位置是/myapp ,而您的ProxyPassReverse/myapp/ ; 代理位置的上下文不匹配,所以ProxyPassReverse不适用。

为什么mod_rewrite代理? 这应该完成相同的,并没有尾随斜线一致性问题:

 ProxyPass /myapp http://backend-server:8000 ProxyPassReverse /myapp http://backend-server:8000