如何获取用户 IP ?
一般来说,没有使用 Nginx 做请求转发的话,直接调用 HttpServcetRequest 对象的getRemoteAddr() 方法就可以获取到用户的 IP 地址。
private String getIpAddress(HttpServletRequest request) {
//获取用户IP地址
String ip = request.getHeader("x-forwarded-for");
}
使用了 Nginx 做转发后,为什么获取不了用户 IP ?
使用了 Nginx 转发了用户的请求后,用户的请求就是从 Nginx 发出,所以直接调用 getRemoteAddr() 方法获取到的是 Nginx 服务器的地址,而不是用户的地址。
如何获取 Nginx 转发后的真实用户 IP?
需要2个步骤:
- 在 Nginx 里面进行配置,将用户的 IP 放到请求头里转发到 Tomcat 服务
- 在请求头里面获取出 IP
修改 Nginx 转发配置的时候,添加以下这行到 location 里面将用户真实 IP 保存到请求头:
proxy_set_header X-Real-IP $remote_addr;
X-Real-IP 是自定义的变量名称,再取 IP 的时候,名称要对应上即可
例如:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:8181/;
root html;
index index.html index.htm;
}
编辑了 Nginx 的配置后,需要重新加载一下 Nginx 的配置 。
获取出用户的真实 IP 地址:
//直接在请求头里面获取即可.
String ipAddress = request.getHeader("X-Real-IP");
还留下一些疑问? 如果是多层 Nginx 转发的话,同样的方式可以获取到吗?
网友评论