nginx 使用 X-Forwarded-For 获取用户访问IP
在前端server里将代理的后端地址前缀配置 X-Forwarded-For 之后
就能在后端中获取到用户的访问地址
具体步骤:
首先在nginx配置中找到自己的前端项目server配置nginx.conf,然后在 反向代理 的后台接口中配置
上面的 反向代理接口 指的时前端用户首次打开页面时会加载的所有由node提供的接口
location ^~ /v1/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:3000/; # 反向代理的node接口地址,如果配置了域名则写域名地址
}
以上代码中的 ^~ /v1/ 表示配置的反向代理,下面代码是vue配置的反向代理
devServer: {
proxy: {
"/v1": {
target: "http://localhost:3000/",/* 后台接口地址 */
changeOrigin: true,
pathRewrite: {
"^/v1": "/"
}
},
}
当前端用户请求后端接口时,后端就可以获取到用户的IP,比如我在前端使用了axios请求post "/v1/setPageView" 接口访问了 node 后端:
这时在node中可以使用如下方法获取到用户的IP
function getIp(req) {
var ip =
req.headers['x-real-ip'] ||
req.headers['x-forwarded-for'] ||
req.connection.remoteAddres ||
req.socket.remoteAddress ||
'';
if (ip.split(',').length > 0) {
ip = ip.split(',')[0];
}
return ip;
}
在 node 的 express 项目的接口中使用上面的函数
router.post('/setPageView', function (req, res, next) {
let clientIp = getIp(req);
res.send(200, { code: 200, body: { data: { clientIp } msg: "获取用户IP成功" }})
}
上面代码中的clientIp就是用户真实访问的ip,但这个ip是可能被用户自己使用的访问设备屏蔽,导致获取不到ip哦!