web-dev-qa-db-ja.com

NginxからApacheログへのリクエストIPの転送

Apacheのフロントエンドリバースプロキシとしてnginxを使用していますが、nginx内に次の構成があります。

location / {
  if (-f $request_filename) {
      add_header X-Static hit;
      access_log off;
    }

  if (!-f $request_filename) {
      proxy_pass https://127.0.0.1:8000;
      add_header X-Static miss;
    }

Apacheがポート8000​​でローカルにリッスンしている。 Apacheのログを見ると、すべてのリクエストは127.0.0.1:443(nginxが置かれている場所)からのものです。実際のIPをApacheに転送して、ログに適切に保存したいと思います。

次の行をロケーションブロックに追加しようとしましたが無駄になりました

proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

私はここで一歩を逃していますか? Apacheのログ形式を変更する必要がありますか?現在、デフォルトの結合ログを使用しています。

1
Pratik Amin

x-forwardをサポートするには、Apacheのログ形式を変更する必要があります

例えば

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined

その後、あなたは使用することができます

 CustomLog logs/access_log combined

したがって、ログの最後のエントリは、nginxが実際のIPに設定しているヘッダーになります。もちろん、LogFormat行で順序を切り替えることができます

3
Mike

mod_rpaf Apacheモジュール を見てください

Deb/ubuntuでは、パッケージ名libapache2-mod-rpafをインストールできます。

インストールしたら、nginxIPを/etc/Apache2/mods-available/rpaf.confのRPAFproxy_ips設定に追加します

<IfModule mod_rpaf.c>
RPAFenable On RPAFsethostname 
On RPAFproxy_ips 127.0.0.1   
</IfModule>

Apacheを再起動すると、ログに正しいIPアドレスが表示されます。

私はあなたのnginx設定でもこれを維持します:

proxy_set_header Host $Host;
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
1
iainlbc

(Nginxからの)Apacheが接続を認識する方法ではなく、HTTPヘッダーのみを変更します。

0
Eno