你好,我在同一台机器上运行多个应用程序,例如 Plone,它使用在端口 8080 上运行的 ZOPE 应用程序服务器,以及托管多个 Web 应用程序并在端口 8081 上运行的 Tomcat。
我想将所有传入流量从运行在端口 80 上的 apache 服务器重定向到这些服务器,以便外部世界只能看到 apache 的默认端口 80。我尝试了许多配置来执行相同操作,但似乎没有一个配置对两个服务器都有效,但如果我单独配置,它就可以正常工作。因此,只有一个配置被使用,另一个配置无效。
我的配置如下:Pastebin 链接
我还尝试了以下配置:
<VirtualHost *:80>
ServerName web.url.in
ProxyPreserveHost On
ProxyPass /MNCD2016 http://web.url.in:8081/MNCD2016
ProxyPassReverse /MNCD2016 http://web.url.in:8081/MNCD2016
RewriteEngine on
RewriteRule ^/$ http://web.url.in/MNCD2016
</VirtualHost>
<VirtualHost *:80>
ServerName web.url.in
ProxyPreserveHost On
ProxyPass / http://web.url.in:8080/
ProxyPassReverse / http://web.url.in:8080/
RewriteEngine on
RewriteRule ^/$ http://web.url.in/ckpw
</VirtualHost>
问题是配置只对其中一个端口有效,而不是对两个端口都有效。例如,如果 Plone 重写规则位于上方,它将优先,而另一个 tomcat 配置将不起作用。单独来看,它们运行顺畅。
我如何才能让它们同时在两个服务器(Zope、Tomcat)上工作,将来可能会更多。这样,我可以将来自 apache 的所有传入请求转移到这些服务器,外部世界应该只会看到前端的 apache,而不是这些服务器。
这是关联我遵循了 Plone 配置。
答案1
您不希望有多个具有相同 ServerName 值的 VirtualHost 块。相反,您希望每个 ServerName 都有一个 VirtualHost 块,并使用 ProxyPass 或 RewriteRule 将流量路由到适当的后端。以下是使用 ProxyPass 的示例:
<VirtualHost *:80>
ServerName web.url.in
ProxyPreserveHost On
ProxyRequests Off
ProxyVia On
ProxyPass /MNCD2016/ http://web.url.in:8081/MNCD2016
ProxyPassReverse /MNCD2016/ http://web.url.in:8081/MNCD2016
ProxyPass / http://web.url.in:8080/
ProxyPassReverse / http://web.url.in:8080/
</VirtualHost>