前言
前阵子99开发网经已全站启用了 QUIC 与 Brotli 压缩,一些站长朋友向我咨询宝塔面板中如何为 Nginx 启用 QUIC 与 Brotli,特制作本篇教程,希望可以帮助大家。
备注:本教程采用 Ubuntu 系统安装宝塔面板。
对于宝塔面板当前版本(8.0.6)而言,对 Ubuntu 系统的兼容性是不错的,大部分应用软件在 Ubuntu 20.04 上支持快速安装,而 Ubuntu 22.04 则需要编译安装。如果是生产环境,考虑到稳定性本来就建议采用编译安装软件。
本教程使用的是 Ubuntu 22.04 + 宝塔面板 v8.0.6 免费版。
启用 QUIC/HTTP3 可以提高网络连接的速度和可靠性,它需要 UDP 协议,这意味着服务器的防火墙必须对 443 端口的 TCP 与 UDP 协议放行。
安装 ngx_brotli
如果要让 Nginx 支持 Brotli 压缩 ,首先需要安装 ngx_brotli 模块,具体方式如下:
sudo -i# 切换到root用户cd /www/server git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli #克隆 ngx_brotli 模块
国内主机连接github.com可能速度较慢,甚至连接失败。可以联系主机服务商或尝试在/etc/hosts文件中添加以下代码:
20.27.177.113 github.com 20.27.177.113 *.github.com
假如这个步骤失败,可点这里使用站长帮打包好的 ngx_brotli 模块。
添加 ngx_brotli 编译参数
echo "--add-module=/www/server/ngx_brotli" > /www/server/panel/install/nginx_configure.pl
以上添加方式适合所有 Nginx 版本安装,且包括未来升级或切换 Nginx 版本无需再另行添加。
编译安装 Nginx 1.25.x
在宝塔面板软件商店中选择 Nginx 1.25 并点击编译安装即可。
如果安装成功,可以看到如下提示:
部分 Ubuntu 系统镜像可能没有 libxml2 和 libxslt 库,会导致安装失败。具体错误提示为:
./configure: error: the HTTP XSLT module requires the libxml2/libxslt
libraries. You can either do not enable the module or install the libraries.
可以通过以下指令安装:
sudo apt-get install libxml2 libxslt-dev #安装 libxml2 和 libxslt 库
安装完毕后,再执行 Nginx 1.25 编译安装。
配置 Brotli 压缩
在宝塔面板中,点开 Nginx 设置 > 配置修改,并搜索 gzip_disable
,如下所示:
在这一行的下方插入以下内容:
brotli on; brotli_comp_level 6; #压缩等级,默认6,最高11,高的压缩等级需要更多的CPU brotli_buffers 16 8k; #请求缓冲区的数量和大小 brotli_min_length 20; #指定压缩数据的最小字节数,只有大于或等于最小长度才会对其压缩。 brotli_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml text/html application/json image/svg application/font-woff application/vnd.ms-fontobject application/vnd.apple.mpegurl image/x-icon image/jpeg image/gif image/png image/bmp application/vnd.api+json; #指定允许进行压缩类型 brotli_static always; #是否允许查找预处理好的、以.br结尾的压缩文件,可选值为on、off、always brotli_window 512k; #窗口值,默认值为512k
保存并重启 Nginx 。
经过以上配置后,Nginx 将支持 Gzip 与 Brotli,浏览器支持 Brotli 的情况下,会默认启用 Brotli 压缩。
配置 QUIC/HTTP3 站点
在宝塔面板中开设站点的默认配置并不会让 QUIC/HTTP3 生效 ,如启用需按下方步骤对主机配置文件进行配置:
必须配置 SSL 证书启用HTTPS。
启用 TLSv1.3 (默认已启用)。
防火墙对 443 端口的 UDP 协议放行,如果使用的云服务器有可能还需在服务商的控制台中配置防火墙。

在站点配置文件中查找:
add_header Alt-Svc 'quic=":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"';
替换为:
add_header Alt-Svc 'h3=":443"; ma=86400';
为第一个启用HTTP/3的站点添加 reuseport 参数,查找
listen 443 quic;
约第5行,修改成:
listen 443 quic reuseport; # 仅能有一个站点使用该参数
值得注意的是 reuseport 参数必须有一个站点使用,且仅可配置一个站点,其它站点不需要该参数也能使用 quic。
完整配置实例
server { listen 80; listen 443 ssl; listen 443 quic reuseport; http2 on; server_name www.99kaifa.vip; index index.php index.html index.htm default.php default.htm default.html; root /www/root/www.99kaifa.vip; #CERT-APPLY-CHECK--START # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除 #include /www/server/panel/vhost/nginx/well-known/www.99kaifa.vip.conf; #CERT-APPLY-CHECK--END #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; ssl_certificate /www/server/panel/vhost/cert/www.99kaifa.vip/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/www.99kaifa.vip/privkey.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000"; add_header Alt-Svc 'h3=":443"; ma=86400'; error_page 497 https://$host$request_uri; # 以下省略n行……
配置其它站点时,省略添加 reuseport 参数的步骤即可,否则会出错。
测试效果
总结
HTTP/3 是第三个主要版本的HTTP协议。与其前任HTTP/1.1和HTTP/2不同,它将弃用 TCP 协议,改为使用基于 UDP 协议的 QUIC 协议实现。
虽然目前全面支持 HTTP/3 的网站数量还较少,但所有主流浏览器均已支持 HTTP/3 ,足以说明它是未来发展趋势。
另外经测试发现,WordPress.org 官网已全面启用 HTTP/3 。