Apache-2.2

如何獲取在同一台伺服器上執行的兩台伺服器的埠重定向?

  • April 17, 2013

我有一個正在執行的亞馬遜雲,它託管兩個 tomcat 實例(埠 8080 和 8081),每個 tomcat 為不同的客戶執行一個 Web 應用程序(foo 和 bar)。

但是,我在嘗試使埠重定向正常工作時遇到問題。

我希望訪問我網站 atwww.foo.com的使用者自動重定向到www.foo.com:8080/foo_app,而訪問我網站 atwww.bar.com的使用者自動重定向到www.bar.com:8180/bar_app.

但是,我也希望埠號不是 URL 的一部分。這一點非常重要,因為大多數使用者處於無法導航到www.foo.com:8080www.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——它們可能會有所不同,但我從未成功過。以上幾乎就是我在一些伺服器上的內容。

引用自:https://serverfault.com/questions/500350