在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模块里面才对阿
一般后端语言就是获取 X-Real-IP