采用nginx的stream模块代理Tomcat此时Tomcat如何获取客户端真实IP?
在nginx中使用stream模块代理Tomcat,配置如下:
stream{ server{
listen 9000;
proxy_pass 127.0.0.1:8080;
proxy_protocol on;#开启后会在三次握手之后发一个proxy包
}
}
Tomcat的Connector中配置proxyProtocol="true":
<Connector port="8080" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000"
protocol="HTTP/1.1" proxyProtocol="true"
/>
此时通过nginx代理请求http://localhost:9000/xxx后浏览器提示如下:
Tomcat的access日志中记录了proxy前缀,但是后面的关键信息(客户端IP、目标IP、客户端端口、目标端口)没有解析到:
通过抓包会发现在三次握手之后发了一个包,内容是:
PROXY TCP4
IP1 IP2 端口1 端口2
目前是直接访问不了Tomcat了,如何解决并正常解析到PROXY报文?
回答:
首先 nginx stream模块里面是解析TCP协议的
你应该是写到http模块里面才对阿
location / { proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:50000/;
}
一般后端语言就是获取 X-Real-IP
以上是 采用nginx的stream模块代理Tomcat此时Tomcat如何获取客户端真实IP? 的全部内容, 来源链接: utcz.com/p/945214.html