Apache 2.2 Mod Proxy ProxyPass行为

时间:2014-01-20 23:42:08

标签: apache http virtualhost mod-proxy

我有一个服务器server.example.com,它通过ProxyPass / ProxyPassReverse到8080在端口80上为Tomcat提供服务,在server.example.com:8001的同一个方框上为Drupal网站提供服务。如果我明确地输入端口8001,Drupal网站的行为正常,但我需要通过server.example.com/blog访问它,因此我为ProxyPass创建了ProxyPassReverse / /blog http://server.example.com:8001正确地为Drupal站点的初始页面提供服务,但是一旦Drupal主页上的表单被填写并提交,POST到/,该站点就会更改为Tomcat站点,大概是因为/不是相对的邮件上的当前主持人:8001。如何让ProxyPass /blog保持持久,以便所有后续请求都保留在:8001 VirtualHost(Drupal网站)中?

我尝试的一件事是使用mod_rewrite:

RewriteCond %{HTTP_REFERER} /^blog/.*$
RewriteRule (.*) %{HTTP_HOST}:8001/$1 [L,P,NC]

但就我所知,这根本没有任何作用。我希望,如果最初的请求是/ blog,那么引用者也是如此,我可以在:8001虚拟主机上保留请求。也许有人可以解释为什么这有缺陷。

1 个答案:

答案 0 :(得分:1)

您很可能遇到的问题是Drupal返回的文档包含所有引用/而不是/blog的生成链接。 mod_rewriteproxypass对文档的内容不执行任何操作 - 它们仅对请求执行操作(或者,对于请求 ProxyPassReverse,在诸如位置:返回内容中的标题之类的链接上。)

要使通常希望以/安装的应用程序在不同的URL上运行,您需要:

(a)配置应用程序以了解正确的基本URL。许多应用程序都包含这样的设置,以便准确支持您所描述的情况。

(b)安装某种可以修改返回文档内容的过滤代理。对于Apache,mod_proxy_html就是这样做的。这本身包含在Apache 2.4中,但可​​能需要单独安装2.2。