记一次Nginx代理转发关于真实ip问题

3,306 阅读1分钟

服务器端使用sprignboot编写,会将国内ip和国外ip分别跳转到不同的链接(国内服务器)
配置域名以后,使用nginx代理转发到该springboot应用的端口
最开始写法如下:

server {
    listen 80;
    server_name 配置的域名;
    
    location / {
        proxy_pass http://ip:port;
    }
}

后面发现无论无何都是识别成国内的 ip
后面百度发现,使用 nginx 转发会有一个代理服务器的 ip 过去
于是改成如下:

server {
    listen 80;
    server_name 配置的域名;
    
    location / {
        proxy_pass http://ip:port;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

就可以实现国内外 i p跳转到不同链接,将真实 ip 放到 header 中,后端通过识别真实Ip进行跳转

具体可参照这篇文章 nginx proxy_set_header测试,查看分别在设置 X-Real-IP 和不设置 X-Real-IP 下获取到的 ip 区别