如果一个客户端请求被nginx代理转发并发送到node.js服务器,想得到客户端的真实ip地址而不是nginx服务器的地址,该怎么办?
首先,在nginx中配置代理服务器接收到的头信息。
proxy_set_header用于配置代理服务器接收的报头信息。配置语法如下:
proxy_set_header field value;
其中field是要设置的变量名,value是变量值。
这里我们将真实的客户端ip设置为X-Real-ip,然后发送给代理服务器,这样代理服务器就可以通过头信息得到客户端的真实ip。配置如下:
server { listen 80; server_name yuanjingyan.com; if ( $host !~* "yuanjingyan.com" ) { return 404; } location / { proxy_pass http://ip:port; proxy_set_header X-Real-IP $remote_addr; } }
然后在node.js中获取客户端真实ip
在node.js中,我们可以通过nginx中配置的变量X-Real-ip来获取客户端的真实IP。代码如下:
var clientIP = context.req.headers['x-real-ip']; //客户端ip,获取的是经过nginx代理后的真实请求ipif(!clientIP){ clientIP=context.req.connection.remoteAddress; //客户端ip,获取的是没有经过nginx代理后的真实请求ip}
需要注意的是,头标中的“x-real-ip”要用小写写,而不是“X-Real-IP”,否则得不到数据。
本文来自罗金艺还行吧投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/520113.html