欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;

如图
Tomcat获取Nginx反向代理的客户端IP地址

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节点,选择你需要的节点添加配置即可。如下图显示
Tomcat获取Nginx反向代理的客户端IP地址

3)重启Nginx和Tomcat

参考链接:https://serverfault.com/questions/514551/make-tomcat-use-x-real-ip/692604