开启QUIC-HTTP/3降低TTFB首字节响应时间 优化网站加速访问教程

开启QUIC-HTTP/3降低TTFB首字节响应时间 优化网站加速访问教程插图

对于网站优化加速,虾皮路一直都在折腾,近段时间将整体站点搬迁到OpenLiteSpeed上,感觉降低了首字节响应时间,因为OpenLiteSpeed同时无缝支持QUIC-HTTP/3,虾皮路直接进行了开启,速度体验还是不错的。下面虾皮路就介绍一下开启QUIC-HTTP/3降低TTFB首字节响应时间,优化网站加速访问的教程。

一、什么是QUIC-HTTP/3

QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议。运行在 QUIC 之上的 HTTP 协议被称为 HTTP/3 (HTTP-over-QUIC)。我们知道,TCP/IP协议族是互联网的基础。其中传输层协议包括TCP和UDP协议。与TCP协议相比,UDP更为轻量,但是错误校验也要少得多。这意味着UDP往往效率更高(不经常跟服务器端通信查看数据包是否送达或者按序),但是可靠性比不上TCP。通常游戏、流媒体以及VoIP等应用均采用UDP,而网页、邮件、远程登录等大部分的应用均采用TCP。

QUIC的一个主要目标就是减少连接延迟,当客户端第一次连接服务器时,QUIC只需要1RTT(Round-Trip Time)的延迟就可以建立可靠安全的连接,相对于TCP+TLS的1-3次RTT要更加快捷。之后客户端可以在本地缓存加密的认证信息,在再次与服务器建立连接时可以实现0-RTT的连接建立延迟。QUIC同时复用了HTTP/2协议的多路复用功能(Multiplexing),但由于QUIC基于UDP所以避免了HTTP/2的线头阻塞(Head-of-Line Blocking)问题。

QUIC-HTTP/3是下一代HTTP技术。众所周知,现在,大部分网站都已经使用了HTTP/2替代第一代HTTP。作为第二代HTTP技术,HTTP/2采用多路复用,使得它比第一代HTTP有更快的速度,且可以降低带宽占用。然而,TCP协议的局限性导致了HTTP/2无法解决队头阻塞的问题。在丢包率很高的网络环境中,HTTP/2的表现甚至不及第一代HTTP。

而HTTP第三代,HTTP/3 (HTTP-over-QUIC),就是QUIC技术的第一个实现。

二、服务器如何开启QUIC-HTTP/3

目前大部分服务器都可以开启QUIC-HTTP/3,但是要访问,基本都要谷歌、火狐、Edge浏览器才支持。目前大部分的人用的是谷歌浏览器或者谷歌内核的浏览器,因此这块体验还是不错的。

1、在Apache上开启QUIC-HTTP/3

很抱歉,Apache虽然用的人多,但是目前还未支持QUIC-HTTP/3,不过Litespeed和OpenLitespeed都是兼容Apache,可以换成Litespeed或OpenLitespeed从而开启QUIC-HTTP/3。

2、在Litespeed/OpenLitespeed上开启QUIC-HTTP/3

这就不用说了,安装后直接默认开启QUIC-HTTP/3。

3、在Nginx上开启QUIC-HTTP/3

Nginx官方默认是不支持QUIC-HTTP/3的,但是可以通过打补丁的方式支持QUIC-HTTP/3。这里用的是CloudFlare开发了的Nginx-QUIC补丁。

首先,下载Nginx和Quiche:

wget https://nginx.org/download/nginx-1.16.1.tar.gz
tar zxvf nginx-1.16.1.tar.gz
git clone --recursive https://github.com/cloudflare/quiche

然后,给nginx打Quiche补丁

cd nginx-1.16.1
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch

接下来就可以编译安装Nginx了:

./configure --prefix=$PWD --build="quiche-$(git --git-dir=../quiche/.git rev-parse --short HEAD)" --with-http_ssl_module --with-http_v2_module --with-http_v3_module --with-openssl=../quiche/deps/boringssl --with-quiche=../quiche
make

安装完毕后,查看nginx版本(nginx -V):

nginx version: nginx/1.16.1 (quiche-a0e69ed)
built with OpenSSL 1.1.0 (compatible; BoringSSL) (running with BoringSSL)

如果看到quiche-xxxxxxx的字样说明编译安装成功。

安装好Nginx之后,我们还需要在虚拟主机配置文件中开启QUIC-HTTP/3.  下面是一个范例nginx配置文件,请参考添加到您目前的虚拟主机配置文件中。如果是BT宝塔面板的,需要到对应网站的配置文件里修改如下代码:

events {
    worker_connections 1024;
}
http {
    server {
        listen 443 quic reuseport;
        listen 443 ssl http2;
        ssl_certificate cert.crt;
        ssl_certificate_key cert.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        proxy_request_buffering off;
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

4、在Caddy上开启QUIC-HTTP/3

Caddy的官方已经支持QUIC-HTTP/3,要在服务器上开启

在Caddy配置文件Caddyfile头部添加下面的行:

{
    experimental_http3
}

然后需要重启Caddy即可。

三、如何检测网站是否开启QUIC-HTTP/3

经过上面的一系列操作,接下来如何检测网站是否开启QUIC-HTTP/3呢?有的用本地浏览器来看,有的用网站来看,这里对于一些不想这么麻烦的,这里虾皮路推荐用网站在线检测即可。检测网址分别为:

  1. https://gf.dev/http3-test
  2. https://http3check.net/

比如虾皮路网站检测的结果

开启QUIC-HTTP/3降低TTFB首字节响应时间 优化网站加速访问教程插图1
开启QUIC-HTTP/3降低TTFB首字节响应时间 优化网站加速访问教程插图2

检测均为支持QUIC-HTTP/3。

四、开启QUIC-HTTP/3的注意事项

(1) CDN问题

如果您的服务器不支持QUIC而且暂时没有办法开启,但你又希望能够给访客提供HTTP3,那么您可以使用支持QUIC-HTTP/3的CDN服务。目前,市面上比较有名的支持QUIC-HTTP/3的CDN服务有两家,第一个是大名鼎鼎的CloudFlare, 第二个是Quic.cloud。

需要注意的是,虽然这两个CDN在节点和客户端之间都支持QUIC-HTTP/3传输,但是CloudFlare和服务器之间的传输只能通过HTTP/1.1进行,而Quic.cloud和服务器之间的传输也可以通过QUIC-HTTP/3传输。因此,如果您的服务器自身也支持QUIC-HTTP/3, 那么Quic.cloud能够完美地在您的服务器–CDN节点–客户端浏览器之间进行传输。

(2) UDP 443端口

前面说过,QUIC-HTTP/3是基于UDP协议的,因此在这里需要开放服务器的UDP 443端口。我们可以使用iptables开放443端口。比如之前虾皮路安装完成了OpenLiteSpeed,但是检测提示没有开通QUIC-HTTP/3,觉得很奇怪,后来检查才发现是没有开启UDP的443端口,在防火墙开启了UDP的443端口后就正常了。

登陆SSH,然后输入下面的命令开放443端口即可。

iptables -I INPUT -p udp --dport 443 -j ACCEPT
service iptables save
service iptables restart
 收藏 (0) 更新不易,打赏吧

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《开启QUIC-HTTP/3降低TTFB首字节响应时间 优化网站加速访问教程》
文章链接:https://www.xiapilu.com/web/web-tutorial/quic-http-3.html
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录   注册

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活