Nginx+Tomcat正确获取客户端请求地址
0
如果使用的是HTTP协议,直接使用如下配置,即可获取到客户端请求地址和IP信息:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
但是如果使用了Nginx使用了HTTPS协议,但是反向代理时使用的是HTTP协议,那么上面的代码就不能获取到正确的协议。
Nginx还需要添加如下配置:
proxy_set_header X-Forwarded-Proto $scheme;
然后Tomcat的Engine下添加如下配置:
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>
这样就能正确获取到协议信息了。
这里还需要说明一点,上面配置均需要配置到location
中方能有效,之前一直配置在server
模块内是无效的。
如果是Spring Boot内嵌的Tomcat可以配置:
server.use-forward-headers=true
server.tomcat.port-header=X-Forwarded-Port
server.tomcat.protocol-header=X-Forwarded-Proto
server.tomcat.remote-ip-header=X-Forwarded-For
新版
server:
tomcat:
remoteip:
host-header: X-Forwarded-Host
port-header: X-Forwarded-Port
protocol-header: X-Forwarded-Proto
remote-ip-header: X-Forwarded-For