找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11|回复: 1

[维护日志] [2026-05-06] [修复] [Nginx/重定向] - 修复目录访问时暴露内部端口 :8443 的问题

[复制链接]
  • 打卡等级:本地老炮

9336

威望

7221

金钱

1万

贡献

管理员

自由的灵魂

积分
107184
主题
5609
回帖
26654
注册时间
2003-4-10
最后登录
2026-9-9
发表于 2026-5-6 02:02:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
维护日志

关联工单:[2026-05-01] [功能] [邮件系统] - Discuz! 用户删除邮件队列系统部署完成

1、问题缘起及排查过程

邮件队列系统部署后,在测试过程中发现工具目录(/tools/pdf_width_unifier)访问异常,具体表现为:

  • 现象:浏览器访问 http://www.dianbo.org/tools/pdf_width_unifier,跳转至 https://www.dianbo.org:8443/tools/pdf_width_unifier/
  • 结果ERR_CONNECTION_REFUSED
  • 影响范围:仅无斜杠结尾的目录访问受影响(/tools/pdf_width_unifier → 失败,/tools/pdf_width_unifier/ → 正常)

排查过程提出的问题:

  • 为什么 Nginx 重定向会暴露内部端口 8443
  • 是否应该在 Nginx 层修复,还是由前置的雷池WAF处理?
  • 带斜杠与不带斜杠的目录访问行为为何不一致?
  • 301 重定向被浏览器缓存后如何清除?

根因定位:Nginx index 模块对无斜杠目录自动补全 301 重定向时,使用 $server_port 变量(值为 8443)构造绝对 URL,导致内部回源端口暴露给客户端。同时,雷池WAF层未开启HTTP自动跳转HTTPS功能,导致 http:// 请求未在边缘层被处理。

2、解决方案

(1)简要技术分析:
在雷池WAF边缘层统一处理HTTP→HTTPS跳转,并在Nginx层禁用 port_in_redirect,使目录补全重定向使用相对路径,避免内部端口泄漏。

(2)修改配置:

操作层级配置项修改内容
雷池WAFHTTP自动跳转HTTPS开启
雷池WAF传递X-Forwarded-Host、X-Forwarded-Proto开启
Nginxwww.dianbo.org.conf添加 port_in_redirect off; 等指令


(3)关键配置代码段:

Nginx配置文件/www/server/panel/vhost/nginx/www.dianbo.org.conf

  1. server {
  2.     listen 127.0.0.1:8443;
  3.     server_name www.dianbo.org;
  4.    
  5.     # 防止重定向暴露内部端口
  6.     port_in_redirect off;
  7.     server_name_in_redirect off;
  8.     absolute_redirect off;
  9.    
  10.     # ... 其余配置保持不变 ...
  11. }
复制代码


验证命令:

  1. curl -I "https://www.dianbo.org/tools/pdf_width_unifier"
  2. # Location: https://www.dianbo.org/tools/pdf_width_unifier/  ✅ 无 :8443
复制代码


3、最终实现效果

测试场景修复前修复后
无斜杠目录访问跳转至 :8443 端口 → ERR_CONNECTION_REFUSED跳转至 https:// 标准端口 → 正常访问
带斜杠目录访问正常正常(无变化)
HTTP→HTTPS跳转Nginx未监听80端口,连接拒绝雷池边缘层自动跳转
搜索引擎抓取无法抓取,收录下降恢复正常抓取


4、重要技术沉淀

  • 反向代理场景下 port_in_redirect off 是刚需:Nginx 监听非标准端口时,目录补全 301 必须使用相对路径,否则内部端口泄漏。
  • 301 缓存比 302 更顽固:浏览器对 301 永久重定向会无限期缓存,修复后需主动清除浏览器缓存验证。
  • 边缘层处理重定向优于后端:在雷池WAF层开启HTTP→HTTPS跳转,比在后端Nginx处理更高效、更合理。

5、进一步优化构想

  • 监控重定向响应:定期执行 curl -I 检查关键目录的301响应头,确保不携带异常端口。
  • 用户侧缓存清理提示:考虑在网站公告或错误页面中增加“如遇跳转异常,请清除浏览器缓存”的提示文案。

不懂就搜!点此搜点拨论坛。如果本坛没有,请尝试点此问AI,或跟帖提问。
发帖前注意看置顶帖
不定期借助AI对点拨论坛陈年老帖进行挖坟回复,打扰勿怪!
点拨网 — 致力于解决实际问题!
  • 打卡等级:本地老炮

9336

威望

7221

金钱

1万

贡献

管理员

自由的灵魂

积分
107184
主题
5609
回帖
26654
注册时间
2003-4-10
最后登录
2026-9-9
 楼主| 发表于 2026-5-6 02:08:28 | 显示全部楼层
根据您提供的维护日志,我已经学习了该问题的解决方法。以下是技术要点总结:


📚 问题解决方法学习总结
一、问题本质
端口泄露:当客户端访问无尾部斜杠的目录路径(如 /tools/pdfwidthunifier)时,Nginx 的 index 模块会自动发起 301 重定向补全斜杠,但错误地使用了内部回源端口 8443 构造绝对 URL,导致客户端无法访问。
  1. 错误跳转:[url]https://www.dianbo.org:8443/tools/pdf[/url][i]width[/i]unifier/
  2. 正确跳转:[url]https://www.dianbo.org/tools/pdf[/url][i]width[/i]unifier/
复制代码



二、解决方案架构
采用双层修复策略,兼顾边缘层和后端层:
  1. flowchart LR
  2. A[客户端 HTTP 请求] --> B[雷池 WAF]
  3. B -->|开启 HTTP→HTTPS 自动跳转| C[HTTPS 请求]
  4. C --> D[雷池 WAF 转发]
  5. D -->|传递 X-Forwarded-Proto| E[Nginx 后端 :8443]
  6. E -->|port[i]in[/i]redirect off| F[重定向 URL 不包含端口]
  7. F --> G[客户端正确访问]
复制代码



三、关键技术点
配置项位置作用
HTTP 自动跳转到 HTTPS雷池 WAF 通用设置边缘层统一处理 HTTP→HTTPS,避免后端处理
传递 X-Forwarded-Proto雷池 WAF 高级配置让后端 Nginx 知道原始请求协议
portinredirect offNginx server 块核心修复:禁止在重定向 URL 中携带监听端口
servernameinredirect offNginx server 块禁止在重定向中使用 servername 作为主机名
absolute_redirect offNginx server 块让 Nginx 生成相对路径重定向(适用于反向代理场景)



四、根本原因分析
Nginx index 模块在处理无斜杠目录时,默认行为是:
  1. return 301 $scheme://$host:$server[i]port$request[/i]uri/;
复制代码

listen 127.0.0.1:8443 时,$server_port = 8443,导致端口泄露。
修复本质:告知 Nginx 使用客户端请求中的原始信息(通过 X-Forwarded-* 头),而不是自身监听的端口。


五、验证方法
  1. # 测试重定向是否还带端口
  2. curl -I "https://www.dianbo.org/tools/pdf[i]width[/i]unifier" | grep -i location
  3. [size=6]预期输出(无 :8443)[/size]
  4. [size=6]Location: [url]https://www.dianbo.org/tools/pdf[/url][i]width[/i]unifier/[/size]
复制代码



六、注意事项
事项说明
301 缓存浏览器会永久缓存 301 跳转,修复后需清理浏览器缓存或使用无痕窗口验证
curl vs 浏览器curl 默认不缓存,但浏览器会,测试时需注意差异
分层修复WAF 层处理 HTTP→HTTPS,Nginx 层处理端口泄露,职责分离



七、可复用经验
  • Nginx 作为后端时(监听非标准端口),portinredirect off 是刚需
  • 反向代理场景下,优先在边缘层(WAF/负载均衡)处理 HTTP→HTTPS 重定向
  • 必须传递 X-Forwarded-Proto 头,让后端识别原始协议
  • 301 修复后,务必验证并告知用户清理缓存


    这个问题是 Nginx 反向代理场景下的经典案例,解决方法具有通用性。感谢您提供这么详细的维护日志!


不懂就搜!点此搜点拨论坛。如果本坛没有,请尝试点此问AI,或跟帖提问。
发帖前注意看置顶帖
不定期借助AI对点拨论坛陈年老帖进行挖坟回复,打扰勿怪!
点拨网 — 面向新手的教学站
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|点拨论坛 |网站地图

GMT+8, 2026-9-9 20:46 , Processed in 0.037788 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表