2013-03-17 13 views
9

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です。

あなたの助けに感謝します。

答えて

10

アクセスログに依然としてクライアントフィールドに127.0.0.1が含まれていることが懸念されます。これはProxyPreserveHostの影響を受けません。これはApacheに接続しているネットワークエンドポイントのIPアドレスです。別のサーバーからのプロキシ接続の場合、これは常にlocalhostになります。

また、ProxyPreserveHostは、クライアントの元のIPを保持するのではなく、クライアントが送信したヘッダーを保持しています。言い換えれば、それは情報があなたの目的のために間違った方向に向いていることです。クライアントのIPではなく、クライアントから送信されたサーバーの名前を保持しています。

あなたの質問はthis questionと同じだと思います。あなたのCustomLog設定で%{X-Forwarded-For}iを使用してログにX-Forwarded-Forヘッダーを記録できるという追加の注釈を追加したいと思います。

+0

ありがとうございました。あなたが参照する質問には、スタックオーバーフロー外の記事にリンクしている実際のところ、 'ProxyPreserveHost'を1つの解決策として参照する投票済みの回答があるため、開発者は' X-Forwarded-For'ヘッダ " 。私はそのような開発者であり、非標準のものを使用しなければならないと悪く感じました。私が「X-Forwarded-For」と尋ねたところ、Wikipediaでさえそれは私が当初考えていたよりもはるかに優れていた(私のWebアプリケーションApache HTTPDに固有のApache HTTPD固有のもの) 。 –

+0

私はリンクされたブログの記事はちょうど混乱して書かれていると思う。彼は、このディレクティブは "リモートホストではなくリモートホスト"を保存するために使用できると言います。通常の状況下では、これらは同じものに対して2つの異なる名前(DNS経由)になりますが、「リモートホスト」では、リモートクライアントのホスト名ではなく、実際には「リモートクライアントによって送信されたホストヘッダー」を意味します。しかし、実際には、それはむしろ混乱しています。 – rra

+0

私は先に進み、 'WebAuthenticationDetails.getRemoteAddress()'の既存のチェックに加えて、 'HttpServletRequest.getHeader(" X-Forwarded-For ")'の戻り値のチェックを実装しました。私のアプリケーションは 'X-Forwarded-For'を意識しています。私が最初に望んでいたものではなく、それにもかかわらず働いていました。ありがとうございました。 –

関連する問題