【问题标题】:Apache ProxyPass for URLS inconsistently failingURLS 的 Apache ProxyPass 不一致地失败
【发布时间】:2012-11-10 02:28:09
【问题描述】:

这个让我发疯。我有一个活动且正在使用的 Apache 代理服务器,在 EC2 上提供内容。它运行良好,并且有多种配置如下的虚拟主机:

<VirtualHost *:80>
    ServerName m.FOO.com
    ServerAlias customer.FOO.com

    ProxyPreserveHost On
    ProxyPass / ajp://10.211.42.48:8009/
    ProxyPassReverse / ajp://10.211.42.48:8009/

    <Proxy ajp://10.211.42.48:8009/*>
          Order allow,deny
          Allow from all
    </Proxy>
</VirtualHost>

这些都很好用,我没有问题。现在我想做的是移动它,而不是每个应用程序的单个虚拟主机,我想在主站点上有一个代理回应用程序服务器的子 URL。因此,他们将拥有 'FOO.com/customer/',而不是拥有“customer.FOO.com”的客户

太好了,听起来很简单,对吧?是的,没有那么多。我编辑服务器“root”的虚拟主机条目(当前显示登录页面),并将代理条目添加到其中的目录中。那应该这样做,对吧?是的,它不是:

<VirtualHost *:80>
    ServerName web01.aws.FOO.com
    DocumentRoot /var/www/html
    ErrorLog logs/www.FOO.com-error_log
    CustomLog logs/www.FOO.com-access_log common

    <Location /a>
            ProxyPass ajp://10.211.42.48:8009
            ProxyPassReverse ajp://10.211.42.48:8009
    </Location> 

    <Location /t>
            ProxyPass http://adm01
            ProxyPassReverse http://adm01
    </Location>

    <Proxy ajp://10.211.42.48:8009/*>
          Order allow,deny
          Allow from all
    </Proxy>

</VirtualHost>

如果我点击http://www.FOO.com/t/ - 我得到了内部网络服务器 - 它正确地代理转发,一切都很好。如果我点击 http://www.FOO.com/a/ 我会收到 404 错误。访问日志甚至显示 404 错误。

请注意,ProxyPass AJP 条目与其他虚拟主机条目中的相同。那么为什么它在另一个 vhost 条目的根目录上工作,而不是作为主 vhost 上的子目录?

停下来!

【问题讨论】:

    标签: apache tomcat ajp proxypass


    【解决方案1】:

    我最终解决了这个问题,我在某处的邮件列表中发现了一个特定的提示。 ProxyPassReverse 指令非常敏感,只有一个基本功能。它在第二个参数上匹配的任何内容(假设使用 ProxyPassReverse A B 形式)都将应用于第一个参数。因此,确保第二个参数正是来自您的应用程序的重定向至关重要,否则 ProxyPassReverse 指令将被忽略。

    就我而言,我最终将 Location 条目更改为:

    ProxyPass /a/ ajp://10.211.42.48:8009
    ProxyPassReverse /a/ http://my.apphost.com/
    

    一切都开始正常工作了。

    【讨论】:

    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多