hello foo bar
リバースプロキシとかLBとかを挟むと当然アクセスIPアドレスがlocalhostになってしまうので、正しいアクセス元のグローバルIPアドレスを設定する必要があります。普通はX-Forwarded-ForというhttpヘッダにグローバルIPを渡して後方のwebサーバーでそれを拾うという段取りになります。
nginxの方の設定ではserverのプロキシのヘッダに設定してあげます。$proxy_add_x_forwarded_forでグルーバルIPが拾えるのでそれをそのままX-Forwarded-Forにセットします。
server{
server_name example.com;
return 301 https://$host$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ←これ追加
access_log /var/log/httpd/front_webserver_nginx-access_log;
location / {
proxy_pass http://localhost:8080/;
proxy_redirect off;
}
location /foobar/ {
proxy_pass http://localhost:8081/foobar/;
proxy_redirect off;
}
}
再起動忘れずに。
# systemctl restart nginx.service
今度はヘッダのX-Forwarded-Forを受けてあげます。ここでの用途は通常、アクセスログやIP制限などになるかと思います。
ログフォーマットはこんな感じにしておく。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combined_proxy
combined_proxyにしておいた方がわかりやすくて無難かと。
ログの方では、
CustomLog /var/log/httpd/localhost-access_log combined_proxy
とかにしておく。Errorログには触れてませんが、Errorログも同じようにしておけばいいです。
ErrorLogFormat Directive
再起動を忘れずに。
# systemctl restart httpd.service
さて先のX-Forwarded-Forはアプリケーション側でどうやって取得するのかというと、普通にヘッダから取り出せばいいだけです。