Nginx プロキシから PM2 Web サーバーに実際の IP を転送する

Nginx プロキシから PM2 Web サーバーに実際の IP を転送する

私は、Mean Stackで動作し、PM2を使用して提供されるAPIを持っています。これは、HTTPエンドポイントを公開します。http://89.89.89.89:8080(IP の例) - ブラウザを使用して直接アクセスできます。

Nginx をインストールし、次の構成を使用して同じサーバー上の API にリクエストをリダイレクトしています。

server {
        listen 8081;
        server_name example.com;

        location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header  X-Forwarded-Host $remote_addr;
        proxy_pass http://127.0.0.1:8080;
        }
}

上記は機能し、APIにアクセスできます。http://89.89.89.89:8081(Nginx ポート) ですが、ターゲットへのリクエストは 127.0.0.1 から送信されています。実際のユーザーの IP アドレスを PM2 に転送したいと思います。いくつかの解決策を検索して試してみましたが、うまくいきません。

正しい方向へのご支援やご指摘をいただければ幸いです。

答え1

モジュール付きの nginx が必要です--with-http_realip_moduleが、モジュールがなくても実行できるはずです。

モジュールが存在するかどうかのチェックを実行しますnginx -v

モジュールがない場合、構成ログ形式で次のように指定する必要があります。例:

log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent"';

access_log  /var/log/nginx/access.log  main;

real_ip_header X-Forwarded-For;

その後、nginx を再起動してログを確認します。

モジュールがインストールされている場合は、それに応じて設定を変更する必要があります

# Directives for setting real_ip/XFF IP address in log files
set_real_ip_from    192.168.101.10; #IP address of master LB
real_ip_header      X-Forwarded-For;

real ip モジュールは、クライアントの送信元 IP アドレスをヘッダーの値に変更するために使用されます。IP アドレス 192.168.101.10 のサーバーからのトラフィックの実際の IP アドレスを設定する必要がありました。

繰り返しになりますが、変更後は nginx サービスを再起動する必要があります。

関連情報