Tomcat获取Nginx反向代理的客户端IP地址
程序员文章站
2022-05-18 17:11:26
...
前言
Nginx出色的性能以及低资源消耗常常被用来做前端转发。
像我服务器会挂Tomcat有时候会有Node,但这些应用并不能同时占用80端口。解决的方法是使用Nginx监听80端口,再根据URL反向代理给Tomcat或者Node。
Java应用常常需要使用HttpServletRequest#getRemoteAddr()
来获取远程客户端的IP地址。但由于转发是通过Nginx,而Nginx就部署在服务器本地,所以只能获取到127.0.0.1。
解决办法
1)配置Nginx
在Nginx配置文件中设置
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如图
2)配置Tomcat的server.xml
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
requestAttributesEnabled="true"
internalProxies="127\.0\.0\.1" />
在Tomcat conf目录下,编辑server.xml。通常可以有多个HOST节点,选择你需要的节点添加配置即可。如下图显示
3)重启Nginx和Tomcat
参考链接:https://serverfault.com/questions/514551/make-tomcat-use-x-real-ip/692604
推荐阅读