ProxyPreserveHost On
の使用を参照しているWeb上では、プロキシされたバックエンドが元の呼び出し元のホスト名を受け取ることを確認する方法が多数あります。私は自分のWebアプリケーションのセキュリティ(Java、Tomcat)を強化するためにこれを使用していますが、ログがユーザーの実際の場所に表示されるようにするといいでしょう。私のTomcatのログは現在表示され、この–かなり役に立たない:ProxyPreserveHostは私にはほとんど役に立たないと思われる
127.0.0.1 - - [17/Mar/2013:06:32:13 +0100] "GET /webapp/frontend/app/partials/welcome.html HTTP/1.1" 200 54
これは期待通りに明確に動作しないというのが私の設定です:
の "/ etc/apache2の/サイト対応/ 000-デフォルト"
:<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /webapp http://localhost:8080/webapp
ProxyPassReverse /webapp http://localhost:8080/webapp
RewriteEngine On
RewriteRule ^/$ /webapp/frontend/app/ [proxy]
RewriteRule ^/webapp/$ /webapp/frontend/app/ [redirect]
RewriteRule ^/webapp/app/$ /webapp/frontend/app/ [redirect]
対応モジュール(000-default
にあったデフォルトのもので、ここから)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod rewrite
これはApache HTTPD 2.2.22を実行しているUbuntu 12.10です。
あなたの助けに感謝します。
ありがとうございました。あなたが参照する質問には、スタックオーバーフロー外の記事にリンクしている実際のところ、 'ProxyPreserveHost'を1つの解決策として参照する投票済みの回答があるため、開発者は' X-Forwarded-For'ヘッダ " 。私はそのような開発者であり、非標準のものを使用しなければならないと悪く感じました。私が「X-Forwarded-For」と尋ねたところ、Wikipediaでさえそれは私が当初考えていたよりもはるかに優れていた(私のWebアプリケーションApache HTTPDに固有のApache HTTPD固有のもの) 。 –
私はリンクされたブログの記事はちょうど混乱して書かれていると思う。彼は、このディレクティブは "リモートホストではなくリモートホスト"を保存するために使用できると言います。通常の状況下では、これらは同じものに対して2つの異なる名前(DNS経由)になりますが、「リモートホスト」では、リモートクライアントのホスト名ではなく、実際には「リモートクライアントによって送信されたホストヘッダー」を意味します。しかし、実際には、それはむしろ混乱しています。 – rra
私は先に進み、 'WebAuthenticationDetails.getRemoteAddress()'の既存のチェックに加えて、 'HttpServletRequest.getHeader(" X-Forwarded-For ")'の戻り値のチェックを実装しました。私のアプリケーションは 'X-Forwarded-For'を意識しています。私が最初に望んでいたものではなく、それにもかかわらず働いていました。ありがとうございました。 –