3

mod_proxy を介して Apache-Tomcat コネクタを使用して Web アプリケーションを構成しました - 以下を参照してください。

<IfModule mod_proxy.c>
ProxyPass /myapp http://127.0.0.1:8080/myapp
ProxyPassReverse /myapp http://127.0.0.1:8080/myapp
</IfModule>

また、URL を読み取ってクライアントを直接識別するために、サブドメインを使用しています。以下の例を参照してください。

クライアント1種類

http://client1.mydomain.com/myapp

クライアント2種類

http://client2.mydomain.com/myapp

次に、URL を読み取り、クライアント名 (client1 または client2) を解析します。私の Web アプリケーションの残りの部分は、クライアントが誰であるかに基づいて駆動されます (もちろん、認証後)。しかし問題は、HttpServletRequest の getRequestURL を使用して URL を取得しようとすると、client1.mydomain または client2.mydomain の代わりにhttp://127.0.0.1:8080/myappを取得することです。これは、Apache がプライマリ ディスパッチャとして使用され、Apache httpd への要求がローカル ホスト Tomcat に転送されていることが原因であると思われます。

URL の構造 (client1.mydomain.com/client1 など) を変更したくありません。また、UI を介してクライアント情報をユーザーに尋ねたくもありません。どうすればこれを達成できますか?

4

1 に答える 1

3

mod_proxy の代わりに AJP コネクタを使用して、この問題を解決しました。

<Location /myapp>
ProxyPass ajp://localhost:8009/myapp
ProxyPassReverse ajp://localhost:8009/myapp
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>

AJP コネクタは、ブラウザの URL を保持しながら Apache から Tomcat にリクエストを転送し (mod_proxy はそれを localhost:8080/myapp に変更しました)、クライアント名を読み取って解析することができました。

これで、実際にユーザーにクライアント名の入力を求めることなく、クライアント固有のデータをレンダリングできます。

于 2011-04-28T04:59:01.013 に答える