我的快速服务器在端口3000上运行,nginx用于反向代理。
req.ip总是返回127.0.0.1,req.ips返回一个空数组
app.enable('trust proxy');
启用/不启用信任代理,x-forwarded-for不起作用:
var ip_addr = req.headers['X-FORWARDED-FOR'] || req.connection.remoteAddress;
nginx配置:
server { listen 80; server_name localhost; access_log /var/log/nginx/dev_localhost.log; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
如何获取请求客户端的IP地址?
答案 0 :(得分:19)
您需要将相应的X-Forwarded-For
标头传递给您的上游。将这些行添加到上游配置中:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
答案 1 :(得分:2)
根据快速文档:
在代理后面运行Express应用时,将应用变量信任代理(通过使用app.set())设置为下表中列出的值之一。
您可以将其设置为布尔值,IP地址,数字或自定义函数。如果您只想获取快速应用程序的 req.ip 的客户代理,则可以将其设置为true。
app.set('trust proxy',true);
app.get("/", (req, res)=>{
console.log(req.ip);
});