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 解析后生效)。

相关推荐
wuyk55512 小时前
Spider-第03讲-HTTP速通与读懂响应
网络·爬虫·网络协议·http
默|笙1 天前
【Linux网络】网络层协议 IP(1)理解报头、网段划分
linux·网络·tcp/ip
梦到啥说啥1 天前
Linux网络编程:TCP网络协议
网络·网络协议·tcp/ip
Shanks.1 天前
2026 远程控制软件实测:ToDesk / 向日葵 / RustDesk / TeamViewer 在跨城与弱网下的真实差距
网络·远程工作·软件需求
Jeremy_WW1 天前
802.3协议解读 06:117章节 RS 和 200GMII / 400GMII I
网络·网络协议·信息与通信·光模块·802.3协议
坤坤子吖1 天前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
顧棟1 天前
INFINI Gateway 服务器端口重用(SO_REUSEPORT)实现与分析
网络·gateway
沫璃染墨1 天前
从零入门计算机网络系列(十八):TCP连接管理详解——从三次握手与四次挥手到TIME_WAIT机制
运维·服务器·网络·c++·网络协议·tcp/ip·tcp
LabVIEW开发1 天前
Omron PLC:接 LabVIEW 常踩的 5 个坑
服务器·网络·labview·labview知识·labview功能·labview程序
南京码讯光电技术有限公司1 天前
工业5G/4G路由器怎么选?核心参数解析与工业级网关选购指南
网络·智能路由器