博客网站启用 HTTP/3
之前为网站加载速度进行优化,都是在网页代码方面,详细见Typecho默认主题网页性能优化,这次使用的是 HTTP/3 ,从访问路径方面让网站访问速度更快。
具体方法如下:
一、升级Nginx
Nginx从1.25版本开始就已经支持 HTTP/3 ,截止今天,最新的版本是1.27,取个折中,我选择升级到1.26.2版本。
二、修改配置文件
升级后,在Nginx的配置文件的server
区域添加如下内容
版本1(简洁)
server
{
listen 443 quic reuseport;
add_header Alt-Svc 'h3=":443"; ma=2592000, quic=":443"; ma=2592000';
ssl_protocols TLSv1.2 TLSv1.3;#确保这行有TLS1.3,因为HTTP/3需要在TLS1.3上运行。
}
版本2(复杂)
server
{
listen 443 quic reuseport;
http3 on;
quic_gso on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_early_data on;
add_header Alt-Svc 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"';
ssl_protocols TLSv1.2 TLSv1.3; #确保这行有TLS1.3,因为HTTP/3需要在TLS1.3上运行。
}
协议比较全的
add_header Alt-Svc 'quic=":443"; h3=":443"; h3-29=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';
添加好后记得重启Nginx
指令说明
listen 443 quic reuseport;
这行指令告诉 Nginx 在端口 443 上监听传入的 QUIC 连接,这是 HTTP/3 协议所使用的传输层协议。
quic 参数指定 Nginx 监听 QUIC 流量。
reuseport 参数允许多个 Nginx 工作进程或线程绑定到同一个端口,这可以提高性能,特别是在多核服务器上,因为它允许操作系统将传入的连接分配给多个进程。
http3 on;
如果Nginx版本是 1.19 或更高,并且已经通过 ssl_protocols 指令启用了 TLS 1.3,那么通常不需要额外的 http3 on; 指令,因为 HTTP/3 支持已经默认启用。
quic_gso on;
这个指令用于启用 QUIC 协议的 Generic Segmentation Offset (GSO) 功能,它可以提高 QUIC 协议的数据传输效率。
ssl_early_data on;
这一行启用了TLS 1.3的早期数据功能,允许客户端在TLS握手过程中发送早期数据,这可以减少往返时间,提高连接效率。
ssl_stapling on;
这个指令启用了 OCSP Stapling 功能。OCSP Stapling 是一种优化,它允许服务器在 SSL/TLS 握手过程中提供证书状态信息,而无需客户端单独查询 OCSP 服务器。这样,客户端可以更快地验证证书的有效性,并且减少了网络请求的次数。
ssl_stapling_verify on;
启用 ssl_stapling_verify 可以提供额外的安全层,因为它确保 OCSP 响应是由可信的 CA(证书颁发机构)签发的,并且没有被篡改。
add_header Alt-Svc
h3=":443"; ma=2592000:表示服务器支持HTTP/3协议,监听在443端口,ma(max-age)参数表示这个信息的有效时间是2592000秒(约30天)。
h3-29=":443"; ma=2592000:表示服务器支持基于TLS 1.2的HTTP/3协议,监听在443端口,ma参数同样表示信息的有效时间。
h3-Q050=":443"; ma=2592000:表示服务器支持基于TLS 1.3的HTTP/3协议,监听在443端口,ma参数表示信息的有效时间。
quic=":443"; ma=2592000:表示服务器支持QUIC协议,监听在443端口,ma参数表示信息的有效时间。
v="46,43":表示支持的HTTP版本,46代表HTTP/3,43代表HTTP/2。
注意:以上指令说明来自AI:kimi。
三、开放端口
确认服务器防火墙或安全组已经放行UDP 443端口,以允许QUIC流量通过。如果有用宝塔等面板,也需要在防火墙放行UDP 443端口。
四、测试网站是否支持 HTTP/3
以上步骤配置完成后,用在线工具测试,基本都会显示支持 HTTP/3 了
工具1:http3.wcode.net
工具2:http3check.net
五、DNS配置
前三步已经算是完成开启 HTTP/3 的操作了,但还有一点瑕疵,由于 HTTP/3 跟之前的版本在传输层的协议不一样,HTTP/3 是UDP,之前都是TCP,首次访问的时候无法确定握手的方式。
比如 Chrome 在 HTTP/3 可用时,总是优先使用 HTTP/3 协议,当失败后再回退至 HTTP/2。而 Safari 则是并发尝试使用 HTTP/2 和 HTTP/3,并优先选择最先完成连接建立过程的连接。这可能使得在测试时发现 Safari 经常甚至永不使用 HTTP/3。
要解决这个问题,就得在建立连接之前就获知服务器是否支持 HTTP/3 ,于是DNS成为了最好的选择,新的 SVCB 和 HTTPS 记录而生。
HTTPS 记录属于 SVCB 的一种,专门用于 HTTP,配置都是一样的,直接用HTTPS就好。
六、常见问题
在浏览器开发者工具里查看协议依然是h2
1.如果开着代理,可能会有这样的情况,关掉刷新重试。
2.浏览器不支持,quic.nginx.org 在这个网址测试是否支持 HTTP/3 连接(一般主流浏览器都已经默认开启 )
3.网络运营商对UDP不支持
最后放一张本站已成功支持h3的截图
参考链接:
宝塔Nginx开启支持HTTP3/QUIC协议
Nginx 开启 HTTP3 与 DNS SVCB 的设置