惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
Recent Commits to openclaw:main
Recent Commits to openclaw:main
O
OpenAI News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LINUX DO - 最新话题
N
News | PayPal Newsroom
S
Secure Thoughts
The Last Watchdog
The Last Watchdog
Help Net Security
Help Net Security
V2EX - 技术
V2EX - 技术
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园_首页
博客园 - 司徒正美
The Cloudflare Blog
D
DataBreaches.Net
Jina AI
Jina AI
L
LINUX DO - 热门话题
宝玉的分享
宝玉的分享
Project Zero
Project Zero
量子位
Spread Privacy
Spread Privacy
Cisco Talos Blog
Cisco Talos Blog
J
Java Code Geeks
T
Troy Hunt's Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
Hugging Face - Blog
Hugging Face - Blog
T
Threat Research - Cisco Blogs
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
AI
AI
C
CXSECURITY Database RSS Feed - CXSecurity.com
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
Attack and Defense Labs
Attack and Defense Labs
V
V2EX
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
博客园 - 三生石上(FineUI控件)
Cyberwarzone
Cyberwarzone

铭心の博客

利用 Hysteria2 面板项目搭建VPN 关于留言评论的一些规则 基于 Aria2 RPC 的 P2P 客户端异常检测与 IP 封禁工具 EMBY通过反代后视频加载缓慢解决 EMLOG友链状态实时更新 Docker代理搭建 PHP IMAP SEARCH搜索关键字 golang pprof 实战 有什么问题的话可以博客留言 隐藏的网站
宝塔面板使用问题记录【强制HTTPS】后网站无法访问
铭心 · 2025-01-13 · via 铭心の博客

问题背景

家庭宽带申请的公网 IP,80 和 443 端口被封锁,无法直接通过公网访问。希望如果 443 端口可访问,则优先使用。如果 443 端口不可访问,则使用 8443 端口。

配置环境:

  • 基于宝塔面板搭建,使用 nginx。
  • 监听端口:443(SSL)和 8443(SSL)。
  • 启用了 强制 HTTPS,内网 HTTP 请求自动跳转到 HTTPS。

问题:

  • 开启强制HTTPS导致非443 端口(如 8443)访问时强制跳转到 443,公网无法使用 8443 提供的 HTTPS 服务。

现象对比

原始规则【宝塔自带】

# HTTP_TO_HTTPS_START
if ($server_port !~ 443) {
    rewrite ^(/.*)$ https://$host$1 permanent;
}
# HTTP_TO_HTTPS_END

# HTTP_TO_HTTPS_START
set $isRedcert 1;
if ($server_port != 443) {
    set $isRedcert 2;
}
if ($uri ~ /\.well-known/) {
    set $isRedcert 1;
}
if ($isRedcert != 1) {
    rewrite ^(/.*)$ https://$host$1 permanent;
}
# HTTP_TO_HTTPS_END
  • 逻辑:请求端口不是443时,会强制跳转至443。

新规则【更改后】

# HTTP_TO_HTTPS_START
# 增加8443端口豁免
if ($server_port !~ (443|8443)) {
    rewrite ^(/.*)$ https://$host$1 permanent;
}
# HTTP_TO_HTTPS_END

# HTTP_TO_HTTPS_START
set $isRedcert 1;
# 增加8443端口豁免
if ($server_port != (443|8443)) {
    set $isRedcert 2;
}
if ($uri ~ /\.well-known/) {
    set $isRedcert 1;
}
if ($isRedcert != 1) {
    rewrite ^(/.*)$ https://$host$1 permanent;
}
# HTTP_TO_HTTPS_END
  • 逻辑:请求端口不是443或8443时,会强制跳转至443。
  • 优点:增加端口豁免,443和8443端口不会强制跳转,保持了对多端口的支持。

解决方案

临时方法

  • 说明:新增了对 8443 的支持,避免 8443 被强制跳转。
  • 手动更改网站的 nginx 配置文件:
  1. 找到 nginx 配置文件路径(宝塔面板中:网站管理 -> 设置 -> 配置文件)。
  2. 根据对应原始规则更改为上面提到的新规则,此方法在重新部署证书或重新打开【强制HTTPS】后会被覆盖配置。

永久方法

  • 修改宝塔面板的内置规则,虽然部署证书和强制HTTPS不会覆盖配置,但是面板更新后会对更改的.py进行覆盖,尽量避免更新。
  • 备份以下文件,避免修改出错:
cp /www/server/panel/mod/project/docker/sites/sslManage.py
/www/server/panel/mod/project/docker/sites/sslManage.py.bak
cp /www/server/panel/mod/project/docker/sites/base.py /www/server/panel/mod/project/docker/sites/base.py.bak
cp /www/server/panel/mod/project/proxy/comMod.py /www/server/panel/mod/project/proxy/comMod.py.bak
  • 修改 sslManage.py 文件
  • 路径:/www/server/panel/mod/project/docker/sites/sslManage.py,找到 525:527 行,修改规则为:
if ($server_port != (443|8443)) { set $isRedcert 2; }
  • 修改 base.py 文件
  • 路径:/www/server/panel/mod/project/docker/sites/base.py找到 158 行,修改规则为:
"force_conf": "    #HTTP_TO_HTTPS_START\n    set $isRedcert 1;\n    if ($server_port != (443|8443)) {\n        set $isRedcert 2;\n    }\n    if ( $uri ~ /\.well-known/ ) {\n        set $isRedcert 1;\n    }\n    if ($isRedcert != 1) {\n        rewrite ^(/.*)$ https://$host$1 permanent;\n    }\n    #HTTP_TO_HTTPS_END",
  • 修改 comMod.py 文件
  • 路径:/www/server/panel/mod/project/proxy/comMod.py,找到 54 行,修改规则为:
"force_conf": "    #HTTP_TO_HTTPS_START\n    set $isRedcert 1;\n    if ($server_port != (443|8443)) {\n        set $isRedcert 2;\n    }\n    if ( $uri ~ /\.well-known/ ) {\n        set $isRedcert 1;\n    }\n    if ($isRedcert != 1) {\n        rewrite ^(/.*)$ https://$host$1 permanent;\n    }\n    #HTTP_TO_HTTPS_END",
  • 重启宝塔服务
bt restart