✅ 补充:NPS 的 HTTP/HTTPS 模式下 Nginx 获取客户端真实 IP 的配置

社区话题 Linux/macOS 与自动化运维 ✅ FRPS 在http和tcp模式下 Nginx 获取客户端真实 IP 的配置对比总结 ✅ 补充:NPS 的 HTTP/HTTPS 模式下 Nginx 获取客户端真实 IP 的配置

#1111

追光
管理员

✅ 补充:NPS 的 HTTP/HTTPS 模式下 Nginx 获取客户端真实 IP 的配置

在使用 NPS(Netty Proxy Server) 作为内网穿透工具时,其 HTTP 和 HTTPS 模式 与 frps 类似,会自动在转发的 HTTP 请求中插入标准的代理头字段,以携带原始客户端的真实 IP 地址。Nginx 只需正确解析这些头部信息,即可获取真实访问者 IP。


? 配置方式(NPS → Nginx)

nginx

server {
listen 80;
listen 443 ssl http2;

=== 启用真实 IP 解析 ===
告诉 Nginx 接受来自任意地址的代理请求(建议替换为 NPS 实际 IP)
setrealipfrom 0.0.0.0/0; 生产环境请改为 NPS 服务器的内网 IP,如:192.168.1.100;

指定真实 IP 存在于 X-Forwarded-For 头中 NPS 默认添加此字段
realipheader X-Forwarded-For;

启用递归解析(支持多层代理链,如 NPS → CDN → Nginx)
realiprecursive on;

=== 其他常规配置(示例)===
servername example.com;
root /var/www/html;
index index.html;

location / {
tryfiles $uri $uri/ =404;
}
}


✅ 结论:
NPS 与 frps 在 HTTP/HTTPS 模式下的真实 IP 传递机制完全一致,均通过 X-Forwarded-For 头实现,Nginx 配置方式无需区分,通用配置即可兼容。

⚠️ 重要提醒:不要与 TCP/V2 模式混淆!
NPS 的 TCP 模式(启用 V2 协议) 使用的是 Proxy Protocol,此时必须配置:
nginx

listen 80 proxyprotocol;
realipheader proxyprotocol;

但 HTTP/HTTPS 模式 ≠ TCP 模式!
如果你在 HTTP 模式下错误地加了 proxyprotocol,会导致 Nginx 报错:
invalid parameter \”proxyprotocol\” 或 400 Bad Request
反之,TCP 模式下若用 X-Forwarded-For,则无法获取 IP,因为 TCP 层没有 HTTP 头。


?️ 安全加固建议(生产环境必做)

nginx
示例:只信任 NPS 内网 IP(推荐)

setrealipfrom 192.168.10.50;  NPS 服务器内网 IP
setrealipfrom 172.16.0.0/12;  可选:私有网络段
realipheader X-Forwarded-For;
realiprecursive on;

✅ 为什么重要?
若允许 0.0.0.0/0,攻击者可通过伪造 X-Forwarded-For: 1.2.3.4 绕过 IP 黑名单、CC 防护、地域限制等机制。必须只信任你控制的 NPS 服务器。

这样可在日志中清晰看到:
$realipremoteaddr → 经 Nginx 解析后的最终真实 IP
$httpxforwardedfor → 原始头内容(可用于调试)

✅ 一句话总结:
NPS 的 HTTP/HTTPS 模式使用标准的 X-Forwarded-For 头传递真实 IP,Nginx 配置方式与 frps 完全相同只需开启 realipheader X-Forwarded-For 并信任 NPS 服务器 IP 即可,切勿误用 proxyprotocol。