Nginx 反向代理 Express ,获取客户端实际信息

创建
阅读 1135

nginx express

当使用 Nginx 反向代理的时候,在 Express 通过 req 获取客户端信息时,默认情况,获取到的是 Nginx 端的信息。比如:req.ip 的值可能是 127.0.0.1,而不是实际访问我们网站用户的客户端信息。要想获取实际客户端信息需要做如下配置:

Express 中配置

app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal','47.240.113.45'])

Nginx 中配置

location 中添加 header 信息


#
# proxy_set_header         Host                $host;
# 客户端 IP 地址
# proxy_set_header         X-Real-IP           $remote_addr;

# 客户端 host 转发, 即域名部分
proxy_set_header         X-Forwarded-Host    $host;
# 客户端 IP 地址转发
proxy_set_header         X-Forwarded-For     $proxy_add_x_forwarded_for;
# 协议转发 HTTP or HTTPS
proxy_set_header         X-Forwarded-Proto   $scheme;

参考文档地址:https://expressjs.com/zh-cn/guide/behind-proxies.html

通过上述配置后,

req.hostname 为客户端实际使用的域名地址

req.protocol 为客户端实际使用的协议 HTTP or HTTPS

req.ip 为客户端实际的 IP 地址

req.ips 为客户端实际的 IP 地址以及信任的中间代理的地址,(比如上面设置的 47.240.113.45),如果没有设置该地址,如果通过这里反向代理访问的,该地址为客户端地址,

实际响应演示: https://www.yidiankuaile.com/v1/status

本文链接 https://www.yidiankuaile.com/post/nginx-reverse-proxy-express

最后更新