0

最近、Tomcat6 を使用するクライアント用の Java アプリケーションをインストールする必要がありました。アプリケーションはドメインのルートから実行する必要があったため、apache2 と mod_proxy_ajp もインストールして、これを機能させるためのプロキシをセットアップしました。プロキシルートではなく、サーブレットの元のパスを含むロケーションヘッダーを処理するために、少しマッサージとグーグル検索を行った後。私はこれを思いつきました。

<VirtualHost *:80>
        ServerName myclientssite.com
        ErrorLog /var/log/apache2/ajp.error.log
        CustomLog /var/log/apache2/ajp.log combined

        <Proxy *>
                AddDefaultCharset Off
                Order deny,allow
                Allow from all
        </Proxy>

        ProxyRequests Off
        ProxyPass / ajp://localhost:8009/appname/
        ProxyPassReverse / http://localhost:8080/appname/
        ProxyPassReverseCookiePath /appname/ /

        Header edit Location ^([^/]*//[^/]*)?/appname/(.*)$ $1/$2
</VirtualHost>

私の質問は、これが最善の解決策です。mod_headers がないと思われ、Header 編集行とヘッダーには通常、appname サブディレクトリが含まれます。

4

1 に答える 1

0

Java アプリケーションは、Location(明示的な構成からではなく) 要求内の情報からヘッダーを作成していますか? この場合、 を使用すれば位置が正しくなるはずですProxyPreserveHost On

ヘッダーを変更する必要があるのは、Apache Httpd フロントエンドが HTTPS 経由であり、Apache Httpd から Java コンテナーへの接続がプレーン HTTP または AJP 経由である場合です。理論的には (実際には常にそうであるとは限りません)、Location ヘッダーには絶対 URIが必要なため、ホスト名が既にわかっている場合は、そのような複雑な式は必要ないかもしれません。

また、AJP ではなく HTTP リバース プロキシを使用することをお勧めします (最終的には非常に似ていますが、より多くのサポートがあるようです)。

ProxyRequests Off
ProxyPass /appname/ http://localhost:8080/appname/
ProxyPassReverse /appname/ http://localhost:8080/appname/
ProxyPreserveHost On

# If you're using HTTPS
Header edit Location ^http://www.example/appname/ https://www.example/appname/
于 2010-06-29T13:14:54.193 に答える