采用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

回到顶部