XCJ's Blog

XCJ

宝塔面板Nginx启用Brotli和HTTP/3

83
2024-09-09

Brotli 和 HTTP/3 介绍

Brotli 是一种通用的无损数据压缩算法,由 Google 开发,主要用于 Web 内容的压缩。Brotli 在 2013 年首次被提出,并在 2015 年被纳入到 HTTP/1.1 和 HTTP/2 协议中。它的主要优点包括:

  • 高压缩率:相比于传统的压缩算法,如 Gzip 和 Deflate,Brotli 能够提供更高的压缩率,尤其是在文本数据(如 HTML、CSS 和 JavaScript)方面。

  • 解压速度快:虽然 Brotli 的压缩速度可能比 Gzip 稍慢,但其解压速度非常快,这使得它非常适合于 Web 场景,能够在用户请求时快速提供压缩资源。

  • 自适应性:Brotli 采用了一种基于字典的压缩方法,能够根据输入数据的特性自适应调整压缩策略,从而优化压缩效果。

HTTP/3 是继 HTTP/1.1 和 HTTP/2 之后的第三代超文本传输协议。它的主要特点包括:

  • 基于 QUIC 协议:HTTP/3 建立在 Google 开发的 QUIC(Quick UDP Internet Connections)协议之上,QUIC 采用 UDP 而非 TCP,这有助于减少连接后的延迟和提高性能。

  • 多路复用:HTTP/3 支持在单个连接中同时处理多个请求和响应,避免了 HTTP/2 中可能存在的队头阻塞问题,从而提高了应用程序的响应速度。

  • 更快的连接建立:QUIC 通过在加密连接的初始握手中进行数据传输,从而减少了连接建立的延迟。

  • 内置加密:HTTP/3 默认使用 TLS 1.3 加密,增强了数据传输的安全性。

安装 Nginx

若要启用 Brotli 压缩功能,请在编译安装 Nginx 时启用 ngx_brotli 模块。

从版本 1.25.0 开始,Nginx 支持 QUIC 和 HTTP/3 协议。若需启用 HTTP/3,请确保所安装的版本高于 1.25.0。

在使用宝塔面板编译安装 Nginx 时,请点击 添加自定义模块 按钮。

在弹出的窗口中填写以下参数:

模块名称ngx_brotli

模块描述ngx_brotli

模块参数--add-module=/www/server/ngx_brotli

前置脚本

cd /www/server
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init

添加 ngx_brotli 模块后,请确保启用该模块,然后点击 提交并安装 按钮,等待 Nginx 安装完成。

启用 Brotli 压缩

请在 Nginx 配置的 http 块内添加以下代码并保存:

brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/javascript application/x-javascript text/xml 
application/xml application/xml+rss text/javascript image/x-icon 
image/vnd.microsoft.icon image/bmp image/svg+xml;

保存配置文件后,打开网站控制台。如果在响应头中的 content-encoding 字段显示为 br,则表示成功启用了 Brotli 压缩。

启用 HTTP/3

要启用 HTTP/3,只需在网站配置的 server 块内将 listen 443 quic; 修改为 listen 443 quic reuseport;

请注意,要启用 HTTP/3,需要使用 SSL 证书。同时,只需在一个网站中设置 reuseport,其他网站即可自动生效。

如果您的配置中没有包含 listen 443 quic;add_header Alt-Svc,您可以在 listen 443 ssl; 后添加以下代码:

listen 443 ssl;
listen 443 quic reuseport;
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"';

然后打开https://http3.wcode.net/页面,在输入框中输入域名进行检测,您将能够看到 HTTP/3 是否成功启用。

如果设置后仍然不支持 HTTP/3,请确保 443 端口的 UDP 协议已经放行。