nginx转发请求后得到客户端真实IP地址
Nginx 和 应用(spring boot程序) 部署 到了同一个 公网服务器。
在访问应用时,需要得到 客户端真实IP地址,需要配置 nginx。
server.location 下配置: proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; |
配置后,可以通过以下请求头获取 客户端真实IP地址:
x-real-ip
x-forwarded-for
-
// HttpServletRequest request
request.getHeader("x-real-ip")
request.getHeader("x-forwarded-for")
测试得到的 请求头名称 和 值如下:
Headers: name=x-real-ip, val=11.22.33.44 name=x-forwarded-for, val=11.22.33.44 name=host, val=www.example.com name=x-nginx-proxy, val=true name=connection, val=close name=content-length, val=28 name=accept, val=text/plain, application/json, application/*+json, */* name=cookie, val=JSESSIONID=C3CA21D813B1EF65F0AF115960DFEF6E; Path=/; HttpOnly name=content-type, val=application/json |
注意,上面的 x-nginx-proxy = true。
注意,此时使用 request.getRemoteAddr() 获取的值为 0:0:0:0:0:0:0:1 (IPv6地址,类似,127.0.0.1)。
---END---
ben发布于博客园
ben发布于博客园