Express - req.ip 返回 127.0.0.1

Posted

技术标签:

【中文标题】Express - req.ip 返回 127.0.0.1【英文标题】:Express - req.ip returns 127.0.0.1 【发布时间】:2014-12-21 17:58:44 【问题描述】:

我的 express 服务器在 3000 端口上运行,使用 nginx 作为反向代理。

req.ip 总是返回 127.0.0.1 而 req.ips 返回一个空数组

app.enable('trust proxy');

启用/不启用信任代理,x-forwarded-for 不起作用:

var ip_addr = req.headers['X-FORWARDED-FOR'] || req.connection.remoteAddress;

nginx配置:

服务器 听 80; server_name 本地主机; access_log /var/log/nginx/dev_localhost.log; 地点 / proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header 升级 $http_upgrade; proxy_set_header 连接“升级”; proxy_set_header 主机 $host; proxy_cache_bypass $http_upgrade;

如何获取请求客户端的 IP 地址?

【问题讨论】:

你的 nginx 配置是什么样的? 添加 nginx 配置 【参考方案1】:

您需要将适当的 X-Forwarded-For 标头传递给您的上游。将这些行添加到您的上游配置中:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;

【讨论】:

这行得通!它在我的服务器上工作。但它仍然在 localhost 上打印 127.0.0.1 如果您从localhost 连接到localhost,您还能期待什么? 不适合我 var ip = (req.headers["cf-connecting-ip"]) ? req.headers["cf-connecting-ip"] : '未知';如果你们中的任何人正在使用 cloudflare 无法弄清楚如何获取 nginx conf 中设置的请求标头***.com/questions/51265803/…【参考方案2】:

根据快递文档:

Express behind proxies

在代理后运行 Express 应用程序时,将应用程序变量信任代理设置(通过使用 app.set())为下表中列出的值之一。

您可以将其设置为布尔值、IP 地址、数字或自定义函数。如果您只想让客户端代理到您的 express 应用的 req.ip,则只需将其设置为 true。

app.set('trust proxy',true); 
app.get("/", (req, res)=>
    console.log(req.ip); 
); 

【讨论】:

以上是关于Express - req.ip 返回 127.0.0.1的主要内容,如果未能解决你的问题,请参考以下文章

express中是如何处理IP的?

容器中的 Node.js 始终获取 docker0 ip

在Nodejs中获取Web访问者IP地址[重复]

express + express-graphql helloworld 返回 null

获取客户端公共 IP [重复]

express cookie 返回未定义