前言
1Panel 从 v1.10.3-lts 版本开始,通过自行构建 OpenResty 的方式实现了新版的网站防火墙(WAF),这导致了之前基于原版 OpenResty 实现的 HTTP/3偷渡办法、国密 等均不再可用。
Caddy 与 Nginx, Apache, IIS, OpenResty 等等,同作为 Web 服务器,早在 2020 年底[1] 就提供了 HTTP/3 的实验性支持,在 2022 年实现 RFC 9114 标准的 HTTP/3[2]。
相比于 Nginx 在 1.25.0 版本才添加了对 HTTP/3 的实验性支持[3],毫无疑问 Caddy 在新标准的支持方面走在了时代的前列。
同时由于 Caddy 的轻量性以及配置文件的易编写性,本站遂采用 Caddy 提供 HTTP/3 支持。
本文将讲述的是,在 1Panel 尚未更新 HTTP/3 支持的情况下,如何在保证 1Panel Waf 等功能正常使用的情况下利用 Caddy 实现 HTTP/3。
本站 已全站支持 HTTP/3 。
准备条件
已安装 1Panel 的服务器一台。
相关基础知识。
警告!!!
生产环境中迁移请注意做好备份。
部署
安装 OpenResty
在 1Panel 中,打开 应用商店
,安装 OpenResty,更改默认的 HTTP 和 HTTPS 端口,如我这里使用 680 和 6443 。
已安装 OpenResty 的用户,此处建议重装 OpenResty,修改配置文件需要修改docker-compose.yml
, nginx.conf
等文件。大神请忽略。
部署站点
参考
申请 SSL 证书
这里建议采用 1Panel 通过 DNS 的方式自动申请续签 SSL 证书的方式,由 Caddy 部署。
1Panel 的证书申请,在这里不再赘述,参考
需要注意的是,在申请的时候启用 推送证书到本地目录,然后选择一个本地目录,我这里填写的是 /ssl
。
新建 Caddy 配置文件
如图,在 1Panel,容器
- 编排
中进入编排路径文件夹。
在此处新建 caddy
文件夹,新建 Caddyfile
文件,填入
{
servers :443 {
protocols h1 h2 h3
}
}
:443 {
reverse_proxy http://127.0.0.1:680 # 这里的端口填写 OpenResty 的 HTTP 端口
tls /ssl/fullchain.pem /ssl/privkey.pem # 这里的证书根据实际情况填写
}
创建 Caddy 容器
回到 1Panel 的容器编排页面 IP:Port/containers/compose
(上图所示页面),点击 创建编排
,文件夹填写 caddy
,编辑内容如下:
services:
caddy:
container_name: caddy
image: caddy
restart: unless-stopped
network_mode: host
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- /ssl:/ssl
点击确认。
此时将会由 Caddy 提供HTTPS 和 HTTP/3 的支持。
检测
目前最新版本的各类浏览器均已支持 HTTP/3 的访问,可以在浏览器的开发人员工具 - 网络 - 协议中显示为 H3。
也可以通过
参考资料
[1]
[2]