当前位置: 首页 > 知识库问答 >
问题:

java - 采用nginx的stream模块代理Tomcat此时Tomcat如何获取客户端真实IP?

丁嘉庆
2023-06-17

在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"
               />

此时请求http://localhost:9000/xxx后浏览器提示如下:
image.png
Tomcat的access日志中记录了proxy前缀,但是后面的关键信息(客户端IP、目标IP、客户端端口、口目标端口)没有解析到:
image.png
通过抓包会发现在三次握手之后发了一个包,内容是:
PROXY TCP4
IP1 IP2 端口1 端口2
image.png
目前是直接访问不了Tomcat了,如何解决并正常解析到PROXY报文?

共有1个答案

公西季
2023-06-17

首先 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/apache代理如何获取客户端真实ip ? 使用nginx/apache作为workerman代理,nginx/apache实际上充当了workerman的客户端,所以在workerman上获取的客户端ip为nginx/apache服务器的ip,并非实际的客户端ip。如何获取客户端真实ip可以参考下面的方法。 原理: nginx/apache将客户端真实ip通过http heade

  • 本文向大家介绍PHP获取真实客户端的真实IP,包括了PHP获取真实客户端的真实IP的使用技巧和注意事项,需要的朋友参考一下 REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。 HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被

  • 本文向大家介绍Java面试之如何获取客户端真实IP,包括了Java面试之如何获取客户端真实IP的使用技巧和注意事项,需要的朋友参考一下 前言 在进行一些小游戏开发时,我们经常比较关注的一个功能便是分享。针对分享,我们希望能根据各个城市或者地区,能有不同的分享文案,辨识地区的功能如果由服务器来完成的话,我们就需要知道客户端的真实IP。今天我们就来看看服务器是如何获取到客户端的真实IP的。 <!--

  • nginx 对接cloudflare 后,可以使用 来配置获取客户端真实 IP 使用 可以配置白名单,只允许客户端从 cf 访问,但是两者结合便无法实现同时生效,请问应该进行配置来实现只允许 cf 接入,并且配置用户真实地址。

  • 问题内容: 我遇到一个简单的问题。我将 在HTTPServlet中 获得 真正的客户端IP 。 从现在开始,我使用: 但是现在它返回一个错误的IP。例如:xxx.xxx.xxx。 50, 但我的IP就像xxx.xxx.xxx。 159 。(在http://whatismyipaddress.com/上检查)。 现在我尝试使用: 它返回NULL。 我还对以下课程进行了探讨: 它还返回了xxx.xxx

  • 本文向大家介绍Java实现获取客户端真实IP方法小结,包括了Java实现获取客户端真实IP方法小结的使用技巧和注意事项,需要的朋友参考一下 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getR