
对于网站优化加速,it168资讯一直都在折腾,近段时间将整体站点搬迁到OpenLiteSpeed上,感觉降低了首字节响应时间,因为OpenLiteSpeed同时无缝支持QUIC-HTTP/3,it168资讯直接进行了开启,速度体验还是不错的。下面it168资讯就介绍一下开启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
接下来就可以编译安装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呢?有的用本地浏览器来看,有的用网站来看,这里对于一些不想这么麻烦的,这里it168资讯推荐用网站在线检测即可。检测网址分别为:
比如it168资讯网站检测的结果
检测均为支持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端口。比如之前it168资讯安装完成了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