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
标头传递给您的上游。将这些行添加到您的上游配置中:
【讨论】:
这行得通!它在我的服务器上工作。但它仍然在 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的主要内容,如果未能解决你的问题,请参考以下文章