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

相关推荐
Cry丶5 小时前
ubuntu安装vsftpd
服务器·网络·ubuntu
SHENGWEI胜为9 小时前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
IMPYLH10 小时前
Linux 系统备份与镜像
linux·服务器·网络
淘气包海鸟11 小时前
水声网络框架
网络·ns3·水
时间售卖铺12 小时前
Nginx 反向代理
运维·nginx·云原生
life码农12 小时前
Nginx location 优先级详解:匹配规则、修饰符与完整代码示例
运维·nginx
Lsetea12 小时前
curl -I检查HTTPS返回405:HEAD、GET与证书验收分层排查
linux·http·https·ssl证书·curl
国科安芯12 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
我命由我1234512 小时前
Python 开发 - Python 虚拟环境
运维·开发语言·后端·python·http·https·java-ee
中屹指纹浏览器svip13 小时前
网络抖动会标记账号异常?分清两种波动
网络