本文当做 caddy2 安装教程就行,更换服务器后已更新为 nginx-quic
# QUIC 与 HTTP3
# 什么是 QUIC
QUIC 是 Quick UDP Internet Connections 的缩写,目前分为 iQUIC 和 gQUIC 两种
QUIC 类似于在内核层实现的 TCP + TLS + HTTP/2。但 QUIC 基于 UDP, 因此绕开了对 TCP 进行改造的大量成本
QUIC 相较于 TLS+HTTP2 有几点优势:
- 首次握手 1-RTT
- 改善了 TCP 的拥塞
- 前向纠错,减少重传
- 连接平滑迁移,网络状态的变更不会影响连接断线
QUIC 与 HTTP/2+TLS 的示意图:
# 为什么部署 QUIC
本网站已经部署了 HTTP/2+TLS1.3v, 理论上可以实现 0-RTT 握手
但由于 QUIC 对弱网环境的优化所以部署了 QUIC4 次丢 1 次的离谱传输
还有一个次要原因就是速度快和我个人比较喜欢新的协议闲的
理由写的有亿点多,进入正题
# QUIC 部署
本站为纯静态网站且近期才开始部署,所以使用方案较为激进
本站直接使用 caddy
进行 web 服务,并没有使用 nginx+caddy 的方案
# 安装 caddy
caddy 仅支持 iQUIC 的最新草案,支持 gQUIC 请使用 litespeed
本文针对于 ubuntu 系统,其他系统见 caddy 官网
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 |
执行上述命令即可安装 caddy
# 配置文件
sudo vim /etc/caddy/Caddyfile |
创建一个 caddyfile
然后写入以下内容:
{ | |
servers { | |
protocol { | |
experimental_http3 | |
} | |
} | |
} |
然后在这段的下面写入:
你的域名:443 { | |
root * / 你的网站根目录 | |
encode zstd gzip # 开启 gzip 功能 | |
tls mail@mail.com # 你的邮件,用于申请 ssl 证书 | |
file_server | |
} |
域名后的 :443
不带空格,空格是代码自动处理的错误
如果你自带证书,可以将 tls 后写成这样:
tls key pem # 先是 key 文件,然后 pem 证书 |
再在域名这个块内插入以下内容:
可以不插入试一下,如果可以就无须插入
header { | |
alt-svc h3=":443", ma=2592000 | |
} |
然后执行以下命令:
sudo caddy run -config=/etc/caddy/Caddyfile # 你的配置文件路径 |
如果没有错误,就成功了
# 验证 QUIC
2022/2/6 更新
今天打开网页,发现 HTTP/2 and SPDY indicator 插件变成了绿色:
打开开发者工具查看:
发现几乎全部为 http/3
协议,安全页也由 TLS1.3
变成了 QUIC
后来发现是最开始没有打开 UDP443 端口导致 QUIC 握手一直失败,触发了浏览器的冷却期
直到今天才结束,使用了 QUIC 握手
ubuntu 放行 443/udp
端口:
sudo ufw allow 443/udp |