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のログ形式を変更する必要がありますか?現在、デフォルトの結合ログを使用しています。
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行で順序を切り替えることができます
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;
(Nginxからの)Apacheが接続を認識する方法ではなく、HTTPヘッダーのみを変更します。