这是一个简单的例子,突出了我的情况:
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>