之前为网站加载速度进行优化,都是在网页代码方面,详细见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 的设置