Anye
Anye
Published on 2024-05-02 / 147 Visits
0
0

1Panel v1 环境下使用 Caddy 实现 HTTP/3

前言

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 等文件。大神请忽略。

部署站点

参考 https://1panel.cn/docs/user_manual/websites/website_create/ 正常部署站点,注意不要开启 HTTPS,后续的 HTTPS 将由 Caddy 提供支持。

申请 SSL 证书

这里建议采用 1Panel 通过 DNS 的方式自动申请续签 SSL 证书的方式,由 Caddy 部署。

1Panel 的证书申请,在这里不再赘述,参考 https://1panel.cn/docs/user_manual/websites/certificate/

需要注意的是,在申请的时候启用 推送证书到本地目录,然后选择一个本地目录,我这里填写的是 /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。

也可以通过 https://http3check.net/ 测试。

参考资料

[1] https://github.com/caddyserver/caddy/releases/tag/v2.3.0-rc.1

[2] https://github.com/caddyserver/caddy/releases/tag/v2.6.0

[3] https://nginx.org/en/docs/http/ngx_http_v3_module.html


Comment