将真实 IP 从 Nginx 代理转发到 PM2 Web 服务器

将真实 IP 从 Nginx 代理转发到 PM2 Web 服务器

我有一个由平均堆栈驱动并使用 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;

真实 IP 模块用于将客户端源 IP 地址更改为标头中的值。我们想要为来自 IP 地址为 192.168.101.10 的服务器的流量设置真实 IP 地址。

再次,更改后必须重新启动 nginx 服务。

相关内容