nginx+TongWeb 配置非443端口的https

第一步:确认Nginx侧配置正常

首先先贴nginx配置

复制代码
    server {	
	listen 18443 ssl;
	server_name 你的域名;
	
	client_max_body_size 200M;
	ssl_certificate      "cert/你的域名.crt";
	ssl_certificate_key  "cert/你的域名.key";
	ssl_session_timeout 5m;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;#请按照这个协议配置
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#请按照这个套件配置,配置加密套件,写法遵循 openssl 标准。
	ssl_prefer_server_ciphers on;
		
		
        location / {
		error_log  logs/你的域名-ssl.error-$logdate.log  error;
		access_log  logs/你的域名-ssl.access-$date_time.log  main;
		index index.jsp index.html index.htm;
				
		# 允许的源(根据您的需求调整,* 表示允许所有来源)
		add_header 'Access-Control-Allow-Origin' '*';
		# 允许的请求方法
		add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
		# 允许的请求头部
		add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';
		# 允许暴露的头部
		add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';

		# 如果是预检请求(OPTIONS),直接返回204
		if ($request_method = 'OPTIONS') {
			add_header 'Access-Control-Max-Age' 1728000;
			add_header 'Content-Type' 'text/plain; charset=utf-8';
			add_header 'Content-Length' 0;
			return 204;
		}
		
		proxy_pass http://tongweb_backend;
		proxy_http_version 1.1;
		proxy_set_header Connection "";
		
		# 【关键修改 2】强制 Host 头携带 18443 端口
		# $host 是域名,$server_port 是 Nginx 监听的 18443
		proxy_set_header Host $host:$server_port;
		# 【关键修改 3】显式传递原始端口和协议
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header X-Forwarded-Port $server_port;
		proxy_set_header X-Forwarded-Host $host:$server_port;
		
		proxy_set_header X-Real-IP  $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }		
				
	
		
    }

作用:

proxy_pass使用http://tongweb_backend指向TongWeb本地8081端口,没有出现协议错配问题

所有location块中都配置了proxy_set_header X-Forwarded-Port $server_port;,已经将Nginx实际监听的18443端口透传给后端TongWeb。

注意:在每一层nginx 代理上,均需设置X-Forwarded-For头,将客户端IP追加到该头中,并传递X-Real-IP等。

多层代理时,X-Forwarded-For会由近及远记录各跳IP(如客户端IP,代理11P,代理2IP),最左侧通常为原始客户端IP。

第二步:修改TongWeb7的tongweb.xml补充端口解析参数

复制代码
<virtual-host name="server" listeners="tong-http-listener" accesslog-enabled="true" accesslog-dir="logs/access" sso-enabled="false" remote-filter-enabled="false" 
  addValve="com.tongweb.catalina.valves.RemoteIpValve,internalProxies=127.0.0.1,中间相关IP逗号分隔,protocolHeader=X-Forwarded-Proto,protocolHeaderHttpsValue=https,remoteIpHeader=X-Forwarded-For,portHeader=X-Forwarded-Port">

新增自定义参数说明:

internalProxies:把全链路中所有中间代理的IP全部标记为信任IP,包括本机环回127.0.0.1、Nginx所在内网IP、映射规则节点IP,以及IPv6本地环回,只有来自这些信任IP的请求,TongWeb才会解析X-Forwarded-For头中的真实客户端公网IP。

补充protocolHeaderHttpsValue=https:确保HTTPS协议标识的识别逻辑完整。

补充portHeader=X-Forwarded-Port:同时保留18443端口的正确透传能力,避免修改后端口识别重新变回443。

测试 JSP‌:

访问页面,查看 basePath。

此时 request.getScheme() 应为 https(由 X-Forwarded-Proto 决定)。

request.getServerName() 应为 zhjg.gdagri.gov.cn

request.getServerPort() 应为 18443(由 X-Forwarded-Port 决定,经 RemoteIpValve 解析后生效)。

相关推荐
星恒讯工业路由器8 小时前
新一代通信网:从“连接万物”到“智联万物”的关键跃迁
网络·物联网·智能路由器·工业路由器·工业物联网·5g-a·新一代通信网
东风破_8 小时前
Docker 基础:为什么需要容器?
前端·后端·nginx
东风破_8 小时前
Docker 实战:使用 Nginx 作为容器入口代理 Node 服务
前端·后端·nginx
暴力求解10 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
石头猫灯10 小时前
WordPress wp2shell 漏洞链完整拆解流程
网络·数据结构·安全·web安全
网安蟹佬霸10 小时前
OSINT开源情报收集实战:从信息搜集到资产测绘(2026最新万字保姆级指南)
前端·网络·安全·web安全·网络安全·开源
游戏开发爱好者811 小时前
WebSocket 抓包怎么查看内容?从握手到消息帧完整解读
网络协议·计算机网络·网络安全·ios·adb·https·udp
80s77712 小时前
动态ip和静态ip有什么区别
服务器·网络·tcp/ip
鲁邦通物联网12 小时前
出海物联网设备的全球化网络接入与合规脱敏架构:基于 Node-RED 与 C++ 零拷贝的边缘系统设计
网络·物联网·系统架构·边缘计算·边缘计算网关·5g数采·工业级边缘计算网关
星恒讯工业路由器12 小时前
家庭无线组网方式全解析:从单路由到FTTR,哪种适合你?
网络·物联网·智能路由器·路由器·家庭组网·ac+ap·mesh组网