我有nginx和节点的问题,因为当我想要获取用户节点的ip时,在我的localhost工作正常(不使用nginx)但在我的服务器中不能正常工作。我正在研究并看到节点no是第一个接收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年4月20日
我可以用nginx文件设置
上的这一行解决问题proxy_set_header X-Real-IP $remote_addr;
和node.js
req.headers['x-forwarded-for']
答案 0 :(得分:13)
您可以使用以下设置配置NGINX以传递客户端的IP地址:
location / {
proxy_pass https://fotogena.co:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # This line.
proxy_connect_timeout 1000;
proxy_send_timeout 1500;
proxy_read_timeout 2000;
}
然后,您可以使用X-Real-IP
中的HTTP标头req.headers["X-Real-IP"]
。
答案 1 :(得分:1)
proxy_set_header X-Real-IP $remote_addr;
对我没有帮助
在代理后面运行Express应用时,必须将应用变量信任代理设置为true。 Express还提供了其他一些信任代理值,您可以在其文档中进行查看,但就目前而言,我们不必介意它们。
事不宜迟,以下是向您的应用程序显示访问者IP地址的步骤:
app.set('trust proxy', true)
在您的Express应用中。proxy_set_header X-Forwarded-For $remote_addr
。req.header('x-forwarded-for')
或req.connection.remoteAddress
; 类似于下面的Nginx配置
location / { proxy_pass http://localhost:3001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; # this line proxy_cache_bypass $http_upgrade; }