如何獲取在同一台伺服器上執行的兩台伺服器的埠重定向?
我有一個正在執行的亞馬遜雲,它託管兩個 tomcat 實例(埠 8080 和 8081),每個 tomcat 為不同的客戶執行一個 Web 應用程序(foo 和 bar)。
但是,我在嘗試使埠重定向正常工作時遇到問題。
我希望訪問我網站 at
www.foo.com
的使用者自動重定向到www.foo.com:8080/foo_app
,而訪問我網站 atwww.bar.com
的使用者自動重定向到www.bar.com:8180/bar_app
.但是,我也希望埠號不是 URL 的一部分。這一點非常重要,因為大多數使用者處於無法導航到
www.foo.com:8080
或www.bar.com:8180
只能在埠 80 上通信的環境中。所以任何輸入的人都
www.bar.com/bar_app
應該被重定向到,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 使用者來說非常好,但 bar 使用者也會被重定向。是否可以使此 iptable 映射僅適用於某些“伺服器”?
我還添加了條目
/etc/apache2/httpd.conf
允許從我的伺服器映射到實際的 webapp
<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>
我將非常感謝任何可以就採取的方法提出建議的人的幫助。
謝謝
您不需要 iptables 配置。事實上,這可能就是您的問題所在。Apache 將進行代理。Apache 在埠 80 上接收對任一域名的請求,並像您一樣將請求代理到埠 8080 或 8180 上的正確 Tomcat 伺服器。
你所擁有的一般都很好。確保您啟用了 mods(代理、proxy_http)。
a2enmod proxy a2enmod proxy_http
重啟阿帕奇。
這些可能已經啟用 - 它會告訴您它們是否已啟用。
以下是我對您的 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——它們可能會有所不同,但我從未成功過。以上幾乎就是我在一些伺服器上的內容。