nginx反向代理后webSocket拿不到真实ip

  • 1、场景:nginx反向代理后使用 WebSocketSession 里面 webSocketSession.getRemoteAddress().getHostString()方法经过了Nginx反向代理后得到的ip地址是127.0.0.1(就是Nginx反向代理的地址)。在本地测试过直接使用Tomcat是能够拿到真实IP的。
  • 2、解决方案
    Nginx配置:
server {  
    listen 8080;   
    server_name 192.168.0.134 ;  

     location / {  
        proxy_set_header Host $host:$server_port;    
        proxy_set_header X-Real-Ip $remote_addr;    
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:8085;
    }  

	
}

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
是专门针对WebSocket配置的,具体可查看Nginx官方文档Nginx关于WebSocket的配置

Nginx增加以下配置 
proxy_set_header Host $host:$server_port; 非80端口 ,用80端口时 不需要$server_port 
proxy_set_header X-Real-IP $remote_addr; 非必须,添加此项之后可以在代码中通过request.getHeader("X-Real-IP")获取ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_set_header X-Forwarded-Proto $scheme; 
  
<Engine name="Catalina" defaultHost="localhost"> 
<Valve className="org.apache.catalina.valves.RemoteIpValve" 
remoteIpHeader="X-Forwarded-For" 
protocolHeader="X-Forwarded-Proto" 
protocolHeaderHttpsValue="https" httpsServerPort="443"/> 非80端口时,必须增加httpsServerPort配置,不然request.getServerPort()方法返回 443. 

此时经过反向代理到Tomcat就能获取到真实IP了。
这里写图片描述

posted on   愤怒的苹果ext  阅读(345)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示