当前位置:论坛首页 > Linux面板 > 讨论

【已完成】体验QUIC: Caddy与Nginx共存

发表在 Linux面板2022-3-17 22:23 [复制链接] 5 11373

众所周知宝塔目前不支持Caddy的部署, Nginx各版本目前暂时不支持HTTP3(除了beta版本). 为了体验HTTP3, 我的解决方案如下, 供各位参考

首先使用宝塔按照常规编译安装Nginx等环境.

然后, 下面开始部署caddy.

参考Caddy的官网Docs: https://caddyserver.com/docs

可以普通地安装: 逐条输入以下命令(推荐使用Debian或Ubuntu. CentOS8已经停止支持了不推荐)
参考https://caddyserver.com/docs/install#debian-ubuntu-raspbian



sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy


或者Docker部署(个人觉得挺麻烦), 这个我没试过, 就不写了.


Caddy安装完毕后, 不要马上启动. 需要进行下面的设置


1. 宝塔开放444端口(Both TCP and UDP), 如果用了国内VPS注意防火墙开放444TCP和444UDP. 444是我们给Caddy的端口
2. 修改Caddy配置.
     SSH终端输入 nano /etc/caddy/Caddyfile (这是默认的Caddy配置文件地址), 如果Docker部署就进入Docker改Caddyfile, 但我不知道这个文件是否也保存在容器的/etc/caddy文件夹里
     修改内容如下:
     画横线的就是需要按照你的实际情况修改的地方


{
        admin off
        auto_https off
        servers {
                protocol {
                        experimental_http3
                }
        }
}
https://域名:444 {
        tls 证书文件路径 密钥文件路径
        // 下面是反向代理的设置, 可以参考以下. 如果是要访问文件, 参考Caddy官方文档就行. (复制记得把这一行删掉)
        reverse_proxy 127.0.0.1:程序端口 {
                header_up X-Forwarded-For {remote_host}
                header_up Host {upstream_hostport}
                header_up X-Real-IP {remote}
        }
}


     其中的444就是我们为Caddy留的端口.

     nano输入完毕按Ctrl + S保存, Ctrl + X退出. 然后终端输入caddy validate  对配置文件进行验证, 如果有错Caddy会告诉你

     返回Valid configuration(翻译: 有效的配置), 就表示配置文件没什么错误了. 再输入caddy fmt --overwrite  格式化配置文件.


3. systemd持久化
    终端输入nano /usr/lib/systemd/system/caddy.service. 然后把里面的内容改了, 如下
    画横线的是需要你根据实际情况改的地方. 当然/usr/bin/caddy 是默认的caddy的路径, /etc/caddy/Caddyfile是默认的配置文件路径, 一般不用改.

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target


[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE


[Install]
WantedBy=multi-user.target

nano输入完毕按Ctrl + S保存, Ctrl + X退出. 然后终端输入systemctl daemon-reload, 然后终端输入systemctl start caddy启动caddy.
可以输入systemctl status caddy查看运行状态.


最后, 配置宝塔.


常规流程配置好SSL等东西. 用了反代的也要配置Nginx的反代.


然后进入宝塔的网站设置, 找到"配置文件"点进去


找到listen 443 ssl http2, 下面加一行: add_header Alt-Svc 'h3=":444"; ma=86400,h3-29=":444"; ma=86400';

然后找到ssl_protocols这一行, 改为ssl_protocols TLSv1.2 TLSv1.3;


到这就配置完毕了.


实际上, 鉴于目前国内CDN都不怎么支持QUIC访问, 更不用说回源, 用了CDN的没必要折腾这个.

我个人用虚拟内网(Zerotier)访问服务器的code-server和网盘, 就需要这个, 实测速度快, 尤其是非首次连接. (首次连接也很快)

腾讯云最近支持QUIC访问了, 但QUIC请求数居然是收费的, 淦


常见的问题:
1. 端口被占用. -> 安装好Caddy别立即启动, 上面说的444就是避免端口冲突的给Caddy的端口
2. 浏览器并没有使用HTTP3, 而是默认的HTTP2 -> 把你电脑的魔法暂时关掉, 暂时只能这样.
3. Websocket不通 -> Nginx的反向代理没配置, 或者没配置对. 已知Websocket还是默认走443端口, 由Nginx处理(其他的走444端口, HTTP3)
4. 其他问题 -> 我没遇到我也不知道怎么办, 可以发出来大家一起看看

使用道具 举报 只看该作者 回复
发表于 2022-3-17 22:26:41 | 显示全部楼层
感谢分享
使用道具 举报 回复
发表于 2022-3-17 22:28:13 | 显示全部楼层

希望宝塔可以官方支持Caddy还有http3
使用道具 举报 回复 支持 反对
发表于 2022-3-17 22:35:52 | 显示全部楼层
cxw620 发表于 2022-3-17 22:28
希望宝塔可以官方支持Caddy还有http3

我们加服务是根据用户需求和使用场景来添加的,用的人不多,或者增加用户学习成本的,一般不会考虑
使用道具 举报 回复 支持 反对
发表于 2022-3-18 18:20:35 | 显示全部楼层
  百度智能云的  CDN  quic  免费
使用道具 举报 回复 支持 反对
发表于 2022-5-23 23:45:59 | 显示全部楼层
很明显http3想用的人很多
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

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