VirtualHost 中的 apache proxypass - 它不应该覆盖 main 吗?

VirtualHost 中的 apache proxypass - 它不应该覆盖 main 吗?

这是一个简单的例子,突出了我的情况:

ProxyPass /google/ http://www.google.com/
ProxyPassReverse /google/ http://www.google.com/

<VirtualHost 127.0.0.1:82>
   ProxyPass /google/ http://www.yahoo.com/
   ProxyPassReverse /google/ http://www.yahoo.com/
</VirtualHost>

在这种情况下,请求“http://127.0.0.1:82/google/“将尝试去http://www.google.com

我还发现,主程序中定义的 ProxyPass 将优先于 vhost 中可用的实际目录 - 例如,如果上面的 VirtualHost 没有具有 ProxyPass 规则,而其 DocumentRoot 包含名为“google”的目录,则 Proxy 仍然有效。

根据 apache 文档,我被引导相信任何“主要”定义都会被能够满足请求的 VirtualHost 覆盖。

答案1

不幸的是,您说得对。我不知道这是否正确,但您可以通过将默认代理选项添加到 [VirtualHost默认] 部分 (http://httpd.apache.org/docs/2.0/vhosts/examples.html#default) 像这样:

<VirtualHost _default_:80>
        ServerName noneset
        DocumentRoot /dev/null
        ProxyPass /google/ http://www.google.com/
        ProxyPassReverse /google/ http://www.google.com/
<VirtualHost>

<VirtualHost *:80>
        ServerName myhost
        DocumentRoot /var/www
        ProxyPass /google/ http://www.yahoo.com/
        ProxyPassReverse /google/ http://www.yahoo.com/

</VirtualHost>

<Proxy *>
                Order deny,allow
                Allow from all
</Proxy>

相关内容