我的 Apache 服务器在端口 80 上运行。
我还在 Jetty 的 8080 端口上运行了一个 Geoserver。为了避免 JavaScript 中的跨域问题,我希望任何发送到 的请求都http://example.com/geoserver
被代理到http://servername:8080/geoserver
我目前使用 Virtual_host 和 mod_proxy 来执行此操作。我的 httpd.conf 有以下代码:
<VirtualHost *:80> ProxyPass /geoserver http://localhost:8080/geoserver ProxyPassReverse /geoserver http://localhost:8080/geoserver </VirtualHost>
现在我需要 Apache 作为在端口 5000 上使用 node.js 运行的另一个应用程序的反向代理。如果我在 http.conf 中添加以下代码:
<VirtualHost *:80> ProxyPass /DocHub http://localhost:5000 ProxyPassReverse /DocHub http://localhost:5000 </VirtualHost>
我在 Apache 日志中收到以下警告: _default_ VirtualHost overlap on port 80, the first has precedence
。并且对 的请求http://example.com/DocHub
出现 404 错误。
Apache 是否有办法充当多个站点的反向代理?还有其他方法可以实现我想要做的事情吗?
答案1
这就是我让它工作的方法。我不确定这是正确的方法还是错误的方法。也许有经验的 Apache 人士可以提供意见。
不要将它们放在单独的 VirtualHost 标签中,而是将它们放在同一个标签中,如下所示:
<VirtualHost *:80> ProxyPass /geoserver http://localhost:8080/geoserver ProxyPassReverse /geoserver http://localhost:8080/geoserver ProxyPass /DocHub http://localhost:5000 ProxyPassReverse /DocHub http://localhost:5000 </VirtualHost>
这对我似乎有用。