我正试图在同一台服务器上运行两个不同的web应用程序,使用相同的域名,如:
www.example.com/app1
www.example.com/app2
这些应用程序是使用Play!框架,并且我使用Apache作为反向代理。我试着遵循在线指南,设置虚拟主机等等,但似乎什么都不起作用,只有第一个应用程序是可访问的,而第二个则不是。
到目前为止,我的apache配置文件是这样的:
<VirtualHost *:80>
ProxyPreserveHost On
DocumentRoot "/home/App1/"
ServerName http://www.example.com/app1
ProxyPass /excluded !
ProxyPass / http://127.0.0.1:9000/app1
ProxyPassReverse / http://127.0.0.1:9000/app1
LogLevel debug
</VirtualHost>
<VirtualHost *:80>
ProxyPreserveHost On
DocumentRoot "/home/App2"
ServerName http://www.example.com/app2
ProxyPass /excluded !
ProxyPass / http://127.0.0.1:8000/app2
ProxyPassReverse / http://127.0.0.1:8000/app2
LogLevel debug
</VirtualHost>
路线、代码和所有内容都是正确的,只是我无法让这些应用程序协同工作。
(我也试着实现在线指南上显示的负载平衡器,但它不起作用)
谢谢。
我认为不能有两个主机名相同的虚拟主机-这没有意义,虚拟主机用于提供不同的主机名,例如,用于提供foo.example.com和bar.example.com。
我想你想要的大致是这样的东西:
<VirtualHost *:80>
ProxyPreserveHost On
ServerName www.example.com
DocumentRoot /some/path/to/something
ProxyPass /excluded !
ProxyPass /app1 http://127.0.0.1:9000/app1
ProxyPassReverse /app1 http://127.0.0.1:9000/app1
ProxyPass /app2 http://127.0.0.1:8000/app2
ProxyPassReverse /app2 http://127.0.0.1:8000/app2
LogLevel debug
</VirtualHost>
James的答案是正确的,你只需要根据自己的需求进行调整,我认为这是开箱即用的:
<VirtualHost *:80>
ProxyPreserveHost On
ServerName www.example.com
ProxyPass /app1 http://127.0.0.1:9000/
ProxyPassReverse /app1 http://127.0.0.1:9000/
ProxyPass /app2 http://127.0.0.1:8000/
ProxyPassReverse /app2 http://127.0.0.1:8000/
</VirtualHost>
请注意,您需要在应用程序中为每条路由加前缀,以反映带有app1
和app2
的文件夹路径,如:
<a href="app1@routes.Application.foo()">foo site</a>
<a href="app2@routes.Application.bar()">bar site</a>