我有一个问题与nginx和节点,因为当我想得到的ip用户与节点,在我的localhost工作正常(没有使用nginx),但在我的服务器不工作,因为它应该.我正在研究,看到节点号是第一个接收IP的,是nginx,在nginx之后向节点发送请求。则节点接收的IP是我的服务器而不是用户的IP。查看配置服务器nignx:
location / {
proxy_pass https://fotogena.co:8000; <-nginx send req to node
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_connect_timeout 1000;
proxy_send_timeout 1500;
proxy_read_timeout 2000;
}
字符串
我使用“req.connection.remoteAddress”来知道用户的IP,控制台显示我的服务器的IP。有人知道怎么解决这个问题吗?
谢谢:D
-----------2016-04-20--------
我可以解决这个问题,与这一行的nginx文件设置
proxy_set_header X-Real-IP $remote_addr;
型
node.js
req.headers['x-forwarded-for']
型
3条答案
按热度按时间bpsygsoo1#
您可以配置NGINX以通过以下设置传递客户端的IP地址:
字符串
然后,您可以使用来自
req.headers["x-real-ip"]
的HTTP标头X-Real-IP
。j5fpnvbx2#
proxy_set_header X-Real-IP $remote_addr;
不适合我在代理后运行Express应用程序时,必须将应用程序变量trust proxy设置为true。Express提供了一些其他的信任代理值,您可以在其文档中查看,但现在,我们不必介意它们。
废话不多说,下面是向您的应用显示访问者IP地址的步骤:
app.set('trust proxy', true)
在您的Express应用程序中。1.在服务器块的Nginx配置中添加
proxy_set_header X-Forwarded-For $remote_addr
。1.您现在可以从
req.header('x-forwarded-for')
或req.connection.remoteAddress
读取客户端的IP地址;在Nginx config中
字符串
6uxekuva3#
我做到了:
proxy_set_header X-Real-IP $remote_addr;
添加到nginx文件app.set('trust proxy', true)
My Express(v4.18.2)应用程序位于Nginx(v1.18.0 Ubuntu)之后,使用了上游块。它也是HTTPS连接。
req.ip
返回127.0.0.1
req.header('x-Real-IP')
return ipv4以192、172或162开头req.headers['x-forwarded-for']
返回使用https://nordvpn.com/what-is-my-ip/offer-site/验证时可以获得的真实的IP地址因此,我认为建议的方法是可行的,但选择正确的方法来获取值仍然很棘手。
source code的