nginx リバースプロキシ側からアクセス元のIPアドレスを渡す
nginxでリバースプロキシ側からバックエンド側にアクセス元のIPアドレスを渡す手順を記述してます。nginxのバージョンは1.18.0を使用してます。
環境
- OS CentOS Linux release 7.9.2009 (Core)
- nginx 1.18.0
リバースプロキシ側設定
まずは、リバースプロキシ側のヘッダー情報「X-Forwarded-For」を追加します。
upstream app {
server バックエンドのIP;
}
server {
listen 80;
server_name リバースプロキシ側のIP;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app;
}
}
X-Forwarded-Forは、以下の流れで値を保持していくため、一番初めの値を取得すれば送信元のIPを取得することができます。
【Client】
X-Forwarded-For: ""
↓
【Proxy1】
X-Forwarded-For: "Client"
↓
【Proxy2】
X-Forwarded-For: "Client, Proxy1"
↓
【last】
X-Forwarded-For: "Client, Proxy1, Proxy2"
設定を反映させるため再起動します。
sudo systemctl restart nginx
バックエンド側
バックエンド側には、「set_real_ip_from」にリバースプロキシ側のIPと、「real_ip_header」にX-Forwarded-Forを指定してあげれば、送信元のIPアドレスをバックエンド側でも取得することが可能です。
server {
listen 80;
server_name バックエンド側のIP;
set_real_ip_from リバースプロキシ側のIP;
real_ip_header X-Forwarded-For;
~
}
「set_real_ip_from」でバックエンド側のIPのみ書き換え可能となります。
set_real_ip_from バックエンド側のIP;
real_ip_header X-Forwarded-For;
設定を反映させるため再起動します。
sudo systemctl restart nginx
-
前の記事
javascript dirnameの値が取得できない 2021.07.05
-
次の記事
javascript lodashを使って指定したインデックス番号以降の配列を取得する 2021.07.05
コメントを書く