2つのTomcatインスタンス(ポート8080と8081)をホストしているAmazonクラウドを実行しており、各Tomcatはさまざまな顧客のWebアプリケーション(fooとbar)を実行しています。
ただし、ポートリダイレクトを正しく機能させようとすると問題が発生します。
www.foo.com
で私のWebサイトにアクセスするユーザーをwww.foo.com:8080/foo_app
に自動的にリダイレクトし、www.bar.com
で私のWebサイトにアクセスするユーザーを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
にもエントリを追加しました
サーバーから実際の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>
取るべきアプローチについてアドバイスできる人の助けをいただければ幸いです。
ありがとうございました
Iptablesの設定は必要ありません。実際、それがおそらくあなたの問題の原因です。 Apacheがプロキシを行います。 Apacheは、いずれかのドメイン名の要求をポート80で受信し、ポート8080または8180で適切なTomcatサーバーに要求をプロキシします。
あなたが持っているものは一般的に大丈夫です。 modが有効になっていることを確認してください(proxy、proxy_http)。
a2enmod proxy
a2enmod proxy_http
Apacheを再起動します。
これらはすでに有効になっている可能性があります-有効になっているかどうかがわかります。
これがあなたの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のバランスが取れています。異なるURLにすることは可能かもしれませんが、成功しませんでした。上記は、私がいくつかのサーバーに持っているものとほとんど同じです。