web-dev-qa-db-ja.com

ProxyPreserveHostは私にはほとんど効果がないようです

プロキシされたバックエンドが元の呼び出し元のホスト名を受信することを確認するためにProxyPreserveHost Onの使用に言及しているWebで多くの人が目にします。これを使用して、Webアプリケーションのセキュリティ(Java、Tomcat)を強化していますが、ユーザーの実際の場所がログに表示されているとよいでしょう。私のTomcatログはこれを示しています-かなり役に立たない:

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/sites-enabled/000-default」

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

あなたの助けをいただければ幸いです。

11
Sander Verhagen

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

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

あなたの質問は この質問 と同じだと思います。ログに記録できるという追加のメモを追加しますX-Forwarded-Forを使用したログのヘッダー%{X-Forwarded-For}iCustomLog構成に追加します。

13
rra