nginx通过多级代理获得真实用户IP的方法

nginx的default.nginx中添加
location ~ ^/mqtt {
        proxy_pass http://emqttd:8083;
        proxy_redirect    off;
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
        # nginx支持websockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
 
说明:
1. 如果使用了多个代理,不能 使用proxy_set_header X-Real-IP $remote_addr直接得到用户真实IP,需要使用命令 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
1)X-real-ip是一个自定义的变量名,名字可以随意取,这样做完之后,用户的真实ip就被放在X-real-ip这个变量里了,然后,在web端可以这样获取:request.getAttribute("X-real-ip")
2)$remote_addr用于获取到上一级代理的IP
3)$proxy_add_x_forwarded_for变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr两部分,他们之间用逗号分开,例如:(223.104.6.125, 10.10.10.45),第一个是用户的真实IP,第二个是一级代理的IP,依此类推
 
2. Nginx通过在客户端和后端服务器之间建立隧道来支持WebSockets通信。为了让Nginx可以将来自客户端的Upgrade请求发送到后端服务器,Upgrade和Connection的头信息必须被显式的设置
posted @ 2020-09-15 17:06  坚强的小蚂蚁  阅读(1140)  评论(0编辑  收藏  举报