Apache 如何作为多个站点的反向代理?

Apache 如何作为多个站点的反向代理?

我的 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>

这对我似乎有用。

相关内容