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

相关推荐
要吃这碗饭32 分钟前
深入理解 TCP 协议:从三次握手到可靠传输
网络·网络协议·tcp/ip
和裕44 分钟前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
呉師傅2 小时前
得力P2500、M2500系列打印机硒鼓加粉及清零方法【纯享版】
运维·网络·windows·电脑
天衍四九-3 小时前
【无标题】
前端·spring boot·mysql·nginx·docker
大侠归来3 小时前
TCP/IP 网络编程:多播与广播
网络·tcp/ip·智能路由器
Zelman4 小时前
HTTPS 协议
网络协议·https
weixin_416667964 小时前
银河麒麟V10看门狗试验-1
网络·chrome·python
白帽攻防录4 小时前
SRC 挖洞:WSO2 JWT 算法混淆绕过深度复盘,CVE-2026-5430 不支持的算法怎么变成管理员
网络·算法·安全·网络安全·jwt
starzy19905 小时前
Flink 优化之网络缓存优化及参数详解:从数据传输机制到反压原理的生产调优指南
网络·缓存·flink
正经教主5 小时前
【FDE系列】阶段3:Day 58:Prompt 安全 — 注入、越狱与防护
网络·人工智能·安全·prompt·fde