【问题标题】:Apache 2.2 Mod Proxy ProxyPass behaviorApache 2.2 Mod Proxy ProxyPass 行为
【发布时间】:2014-02-10 08:31:59
【问题描述】:

我有一个服务器server.example.com,它通过ProxyPass/ProxyPassReverse 到8080 为端口80 上的Tomcat 和server.example.com:8001 的同一框上的Drupal 站点提供服务。如果我明确输入端口 8001,则 Drupal 站点运行正常,但我需要通过 server.example.com/blog 访问它,所以我为 /blog http://server.example.com:8001 创建了一个 ProxyPass/ProxyPassReverse,它为 Drupal 站点提供初始页面正确,但是一旦填写并提交了 Drupal 主页上的表单,即 POST 到/,该站点将更改为 Tomcat 站点,可能是因为 / 与 post:8001 上的当前主机无关。如何使/blogProxyPass 保持持久性,以便所有后续请求都保留在:8001 VirtualHost(Drupal 站点)内?

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

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

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

【问题讨论】:

    标签: apache http virtualhost mod-proxy


    【解决方案1】:

    您很可能遇到的问题是 Drupal 返回的文档包含生成的链接,这些链接都引用 / 而不是 /blogmod_rewriteproxypass 不会对文档的 contents 做任何事情——它们只会根据 request(或者,对于 ProxyPassReverse,链接例如 Location: 返回内容中的标题)。

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

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

    (b) 安装某种可以修改返回文档内容的过滤代理。对于 Apache,mod_proxy_html 正是为了做到这一点。这包含在 Apache 2.4 中,但可能需要为 2.2 单独安装。

    【讨论】:

    • 这听起来很正确,事实上我已经在 settings.php 文件中找到了 $base_url 设置,它完成了 A) 部分,但我相信还需要做更多的工作。我现在得到一个白色的 index.php 页面,这让我认为未找到包含。我很可能会将您的答案标记为已接受,但希望首先鼓励更多答案。感谢您的输入,我认为它非常准确。
    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2010-11-13
    • 1970-01-01
    • 2010-10-30
    • 2011-11-27
    • 2015-02-23
    相关资源
    最近更新 更多