web-dev-qa-db-ja.com

同じサーバーで実行されている2つのサーバーのポートリダイレクトを取得するにはどうすればよいですか?

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>

取るべきアプローチについてアドバイスできる人の助けをいただければ幸いです。

ありがとうございました

1
Phil

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にすることは可能かもしれませんが、成功しませんでした。上記は、私がいくつかのサーバーに持っているものとほとんど同じです。

5
ETL