由于 nginx 反向代理,无法获取用户 ip
Posted
技术标签:
【中文标题】由于 nginx 反向代理,无法获取用户 ip【英文标题】:Not getting the user ip due to nginx reverse proxy 【发布时间】:2021-09-06 18:41:47 【问题描述】:我使用节点作为后端服务器,使用 nginx 作为反向代理服务器。
我想将用户 IP 地址存储在我的数据库中。为此,我在博客和论坛上搜索,发现 public-ip npm 模块
之后我在服务器上测试,发现这个模块会返回我的EC2实例公共IP而不是用户公共IP。
在网上找到这个问题后,再次发现这可能是由于使用了反向代理。
为此,我需要在我已经做过的位置块下添加此代码。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
并且需要在我的快递服务器上添加这段代码
app.set('trust proxy', true)
并调用它来获取 IP
req.header('x-forwarded-for') or req.connection.remoteAddress
更新 这是我的 nginx 配置
location /
include /etc/nginx/proxy_params;
proxy_pass http://127.0.0.1:3001;
My proxy_params is
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_redirect off;
proxy_cache_bypass $http_upgrade;
我需要询问如何在某些函数或任何 API 调用中使用它。它肯定会返回我的客户端 IP 吗?
非常感谢任何帮助或建议。 提前致谢。
【问题讨论】:
请向我们展示您的 nginx 配置。 @Marc 我已经更新了这个问题 【参考方案1】:这应该为你做。
nginx 配置:
server
listen 80 default_server;
listen [::]:80;
server_name nodeapp;
location /
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_redirect off;
proxy_cache_bypass $http_upgrade;
proxy_pass http://127.0.0.1:8000;
快递应用:
var express = require('express');
var app = express();
app.set('trust proxy', true);
app.get('/', (req, res) =>
let ip = req.ip;
if (ip.substr(0, 7) == '::ffff:')
ip = ip.substr(7);
console.log(ip);
res.end(ip);
);
app.listen(8000, console.log('listening on 8000'));
编辑: 我在 nginx 配置中犯了一些错误,已修复它。
【讨论】:
如果是这样,那么我应该使用 request-ip 模块还是应该从我的包中删除它 其实我更新了答案,所以检查一下。 所以这里没有使用public-ip模块。所以我可以从我的服务器上卸载? 我累了,它在开发中返回 127.0.0.1。未经生产测试。我有一个问题,它就像我需要启动 nginx 服务器的依赖项,因为如果我关闭 nginx 服务器,则会收到错误消息。 我想尝试将XFF
标头记录到控制台,因为这至少对我有用。 Ip 也可能是列表中的第二个。另外,请更新您的问题,但有例外。以上是关于由于 nginx 反向代理,无法获取用户 ip的主要内容,如果未能解决你的问题,请参考以下文章
nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP