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

相关推荐
Zixhy2 小时前
手撕Reactor模型实现同步高并发服务器及Muduo网络库深入解析
linux·服务器·网络·数据库·c++
晴天162 小时前
前端 postMessage 使用场景
前端·javascript·网络
IMPYLH3 小时前
HTML 的 <samp> 元素
前端·网络·html
隐擎fox10 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战
爬虫·python·网络协议·安全·网络安全·https
游戏开发爱好者810 小时前
网络连接排查指南,谁在电脑后台偷跑流量,哪些程序在联网
网络协议·计算机网络·网络安全·ios·adb·https·udp
Databuff10 小时前
AI SSH工具,集齐SSH、SFTP、知识库RAG、AI助手
网络·人工智能·ssh
Jeremy_WW10 小时前
QSFP/QSFP-DD/OSFP 通用管理接口规范(CMIS)解读:13 Page 9Fh
网络·网络协议·信息与通信·光模块·cmis
en.en..12 小时前
OSI七层模型|各层级传输数据单位(详解)
网络
疯狂打码的少年13 小时前
【计算机网络】TCP/IP协议族(四层体系结构,与OSI对比)
网络·笔记·tcp/ip·计算机网络
snow@li13 小时前
服务器运维:Linux命令速查手册(全景梳理)
linux·服务器·网络