我有一个亚马逊云运行托pipe两个tomcat实例(端口8080和8081)与每个tomcat运行Web应用程序(富和酒吧)为不同的客户。
但是我有一个问题,试图让端口redirect工作正常。
我希望来到我的网站www.foo.com用户自动redirect到www.foo.com:8080/foo_app以及来自我的网站www.bar.com:8180/bar_app用户将被自动redirect到www.bar.com:8180/bar_app 。
但是,我也希望端口号不是URL的一部分。 这是非常重要的,因为大多数用户处于无法导航到www.foo.com:8080或www.bar.com:8180环境中,并且只能在端口80 www.bar.com:8180通信。
因此,任何在www.bar.com/bar_app人都应该被redirect到www.bar.com:8081/bar_app但URL仍然必须是www.bar.com/bar_app
我试图做到这一点的方法是做到以下几点:
我使用以下命令将端口80上的任何通信映射到端口8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
这对于foo用户来说非常棒,但是酒吧用户也被重新定向。 是否有可能使这个iptable映射只适用于某些“服务器”?
我也添加了入口/etc/apache2/httpd.conf
以允许从我的服务器映射到实际的Web应用程序
<VirtualHost *:80> ProxyPreserveHost On ProxyPass / http://123.123.123.123:8080/foo_app ProxyPassReverse / http://176.34.212.135:8080/foo_app ServerName www.foo.com ServerAlias www.foo.com </VirtualHost> <VirtualHost *:80> ProxyPreserveHost On ProxyPass / http://123.123.123.123:8180/bar_app ProxyPassReverse / http://176.34.212.135:8180/bar_app ServerName www.bar.com ServerAlias www.bar.com </VirtualHost>
任何能提供build议的人都可以提供帮助,我将不胜感激。
谢谢
你不需要iptablesconfiguration。 事实上,这可能是您的问题来自何处。 Apache将做代理。 Apache在端口80上接收任一域名的请求,并将请求代理到端口8080或8180上的右侧Tomcat服务器。
你有什么通常很好。 确保你已经启用了mod(proxy,proxy_http)。
a2enmod proxy a2enmod proxy_http
重新启动Apache。
这些可能已经启用 – 它会告诉你,如果他们是。
这是我build议你VHost的条目:
<VirtualHost *:80> ServerName www.foo.com ProxyPreserveHost On ProxyPass /foo_app http://123.123.123.123:8080/foo_app ProxyPassReverse /foo_app http://176.34.212.135:8080/foo_app RewriteEngine on RewriteRule ^/$ http://www.foo.com/foor_app </VirtualHost> <VirtualHost *:80> ServerName www.bar.com ProxyPreserveHost On ProxyPass /bar_app http://123.123.123.123:8180/bar_app ProxyPassReverse /bar_app http://176.34.212.135:8180/bar_app RewriteEngine on RewriteRule ^/$ http://www.bar.com/bar_app </VirtualHost>
使用ProxyPass,我总是在两边都保持URL平衡 – 有可能让他们有所不同,但我从来没有成功。 以上几乎是我在我的一些服务器上。