Bootstrap

nginx 获取客户端真实Ip

nginx 获取客户端真实Ip

我们大多数情况下访问服务时,客户端并不是直接访问到服务器的,而是首先请求到反向代理,反向代理再转发到服务器端实现服务访问,通过反向代理实现路由/负载均衡等策略。这样在服务端拿到的客户端ip是反向代理服务器的ip,而不是真实的客户端ip,但是为了记录日志或者向特定IP发送消息(如WebSocket发消息)又或者想把机器IP地址作为“用户”来进行其他操作,这时候就需要获取客户端真实IP地址

nginx配置

server {
   listen 80;
   server_name xxx.xxxx.com;
  
   location / {
       #保留代理之前的host 包含客户端真实的域名和端口号
       proxy_set_header    Host  $host; 
       #保留代理之前的真实客户端ip
       proxy_set_header    X-Real-IP  $remote_addr;  
       #这个Header和X-Real-IP类似,但它在多级代理时会包含真实客户端及中间每个代理服务器的IP
       proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
       #表示客户端真实的协议(http还是https)
       proxy_set_header X-Forwarded-Proto $scheme;
       #指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
       #如果使用"default"参数,将根据location和proxy_pass参数的设置来决定。
       #proxy_redirect [ default|off|redirect replacement ];
       proxy_redirect off;
       proxy_pass http://IP:PORT;
   }
}

文档参考

如何利用Nginx代理获取真实IP

;