CentOS 8 使用动态模块方式安装并加载 Nginx 模组 ngx_brotli 然后启用 brotli 压缩

本文指导如何在CentOS 8系统上使用动态模块方式安装并加载Nginx的ngx_brotli模块,以启用Brotli压缩。详细步骤包括获取ngx_brotli和Nginx源码,动态模块加载,以及配置项的设置,以实现高效的数据压缩。

项目地址:Github 仓库地址

ngx_brotli

Brotli是一种通用无损压缩算法,它结合了LZ77算法的现代变体、Huffman编码和二阶上下文建模来压缩数据,其压缩比可与目前可用的最佳通用压缩方法相媲美。 它在速度上与 deflate 相似,但提供了更高的压缩率。

注意:该压缩编码仅可用于 https 通信。

ngx_brotli 包含两个模块:

  • ngx_brotli filter module - 用于动态压缩响应体。
  • ngx_brotli static module - 用于使用预压缩的 .br 文件进行服务(静态站点)。

安装方法

获取 ngx_brotli

  1. 确保你安装了 git,如果没有,使用命令安装:
$ yum -y install git
  1. 从仓库获取 ngx_brotli
$ git clone https://github.com/google/ngx_brotli.git

如果服务器位于国内,建议使用镜像:

$ git clone https://gitee.com/xlsw/ngx_brotli.git
  1. 初始化子模块
$ cd ngx_brotli
$ git submodule update --init 
$ cd ~

获取 Nginx 源码

  1. 如果你已经安装了 Nginx,请查看版本:
$ nginx -v

本示例已安装 nginx 版本为:

nginx version: nginx/1.20.1

  1. 获取并解压 Nginx 源码(将字符x替换为你的 Nginx 版本号,如未安装可自定义)
$ wget https://nginx.org/download/nginx-1.x.x.tar.gz && tar zxvf nginx-1.x.x.tar.gz

本示例版本为 1.20.1,则命令为:

$ wget https://nginx.org/download/nginx-1.20.1.tar.gz && tar zxvf nginx-1.20.1.tar.gz
  1. 清除垃圾文件
$ rm nginx-1.20.1.tar.gz

安装

以下两种方式选择一种即可,已通过 yum 源安装 Nginx 建议选择第一种 动态模块加载

动态模块加载
  1. 安装编译所需环境
$ yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
  1. 进入 Nginx 源码目录并编译子模块

官方文档说明为:

$ cd nginx-1.x.x
$ ./configure --with-compat --add-dynamic-module=/路径/ngx_brotli
$ make modules

本示例则使用(ngx_brotli已克隆到本地~目录下):

$ cd ~/nginx-1.20.1
$ ./configure --with-compat --add-dynamic-module=../ngx_brotli
$ make modules
  1. 将生成的 .so 动态库移动到 Nginx 的 modules 目录(默认为/etc/nginx/modules
$ cp objs/*.so /etc/nginx/modules
  1. 为 .so 动态库文件添加权限
$ chmod 644 /etc/nginx/modules/*.so
  1. nginx.conf 中添加配置(添加至 http 块之上)
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
模块静态编译并安装

将第一行中的字符x替换为你上文中获取的 Nginx 源码版本号

$ cd nginx-1.x.x
$ ./configure --add-module=/path/to/ngx_brotli
$ make && make install

该操作将会直接将ngx_brotli编译并直接安装到 Nginx 中

配置项

brotli_static
  • 语法:brotli_static on|off|always
  • 默认值:off
  • 上下文:http, server, location

启用或禁用自动检查是否有.br预压缩文件是否存在,然后再使用;如果值为always则不会检查而直接使用预压缩文件。

brotli
  • 语法:brotli on|off
  • 默认值:off
  • 上下文:http, server, location, if

启用或禁用动态压缩响应体。

brotli_types
  • 语法:brotli_types <mime 类型> [..]
  • 默认值:text/html
  • 上下文:http, server, location

除了text/html外,还支持对特定的MIME类型进行动态压缩。特殊值*会匹配所有MIME类型,Content-Typetext/html的响应体将总是被压缩。

brotli_buffers
  • 语法:brotli_buffers <number> <size>
  • 默认值:32 4k|16 8k
  • 上下文:http, server, location

已被弃用,忽略该条配置项。

brotli_comp_level
  • 语法:brotli_comp_level <级别>
  • 默认值:6
  • 上下文:http, server, location

设置 Brotli 动态压缩质量级别,取值范围从011。取值越大但性能损耗越高,压缩比越高,建议默认。

brotli_window
  • 语法:brotli_window <大小>
  • 默认值:512k
  • 上下文:http, server, location

设置 Brotli 窗口大小,取值为1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k, 256k, 512k, 1m, 2m, 4m, 8m16m。Gzip 压缩使用固定大小的32k窗口,这意味着 Brotli 窗口最多可以比 deflate 窗口大 512 倍。这种差异在 Web 服务器上下文中几乎无关紧要,因为大于 32KB 的文本文件是少数。

brotli_min_length
  • 语法:brotli_min_length <长度>
  • 默认值:20
  • 上下文:http, server, location

设置启用 Brotli 压缩的响应体最小长度,该值只会根据响应头中的Content-Length字段进行判断。

变量

$brotli_ratio:实现压缩比,原始响应大小和压缩响应大小之间的比率计算结果。

示例配置
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types application/atom+xml application/javascript application/json application/rss+xml
             application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype
             application/x-font-ttf application/x-javascript application/xhtml+xml application/xml
             font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon
             image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;
<think> 嗯,用户这次的问题很明确:如何在Linux系统上安装Nginxngx_http_v2_module模块。从引用内容看,用户似乎已经接触过Nginx基础编译安装(引用[2][4]),但现有安装缺少HTTP/2支持。 用户引用的资料里有几个关键线索:引用[2]展示了含--with-http_ssl_module的编译参数,引用[4]验证模块的方法。不过核心问题在于,ngx_http_v2_module从Nginx 1.9.5开始才作为独立模块存在,且依赖OpenSSL库——这点用户可能没意识到。 需要区分两种情况:用户是首次安装还是升级现有Nginx?引用中同时出现两种路径(/usr/local/openresty和/usr/local/nginx),可能用户环境较复杂。安全起见,我会建议从源码重新编译的方案,强调备份和SSL依赖。 注意到引用[3]提到worker_cpu_affinity等优化参数,但用户当前只需HTTP/2模块,所以编译参数保持简洁。不过要提醒用户,生产环境可能需要额外优化参数。 用户上次问过access模块配置(引用[1]),这次转向底层模块安装,可能是在搭建HTTPS服务。可以推测下一步会问证书配置或HTTP/2优化,所以相关问题里埋了这个伏笔。 最后检查技术点:必须强调HTTP/2强制依赖TLS(即必须同时启用ssl模块),且编译前要确认openssl版本——引用[2]里用OpenResty的示例不一定满足,这点要特别说明。 </think> 在Linux系统上安装Nginx的`ngx_http_v2_module`模块(用于HTTP/2支持),需通过源码重新编译Nginx实现。以下是具体步骤: --- ### 📌 安装步骤 #### 1. **安装依赖库** ```bash # Debian/Ubuntu sudo apt update sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev # RHEL/CentOS sudo yum groupinstall "Development Tools" sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel ``` #### 2. **下载Nginx源码** ```bash wget http://nginx.org/download/nginx-1.25.3.tar.gz # 替换为最新稳定版 tar zxvf nginx-*.tar.gz cd nginx-*/ ``` #### 3. **配置编译参数** 添加`--with-http_ssl_module`(必需)和`--with-http_v2_module`: ```bash ./configure \ --prefix=/usr/local/nginx \ # 安装路径 --with-http_ssl_module \ # HTTP/2依赖TLS --with-http_v2_module \ # 启用HTTP/2模块 --with-http_realip_module \ # 可选:常用模块 --with-http_stub_status_module # 可选:状态监控 ``` > 📌 **注意**:若需保留原有模块,需通过`nginx -V`查看旧配置参数完整复制到`./configure`命令中[^4]。 #### 4. **编译安装** ```bash make sudo make install ``` #### 5. **验证模块安装** ```bash /usr/local/nginx/sbin/nginx -V 2>&1 | grep -o http_v2_module # 若输出"http_v2_module"则表示成功[^4] ``` #### 6. **配置Nginx启用HTTP/2** 修改站点配置文件,在`server`块中添加: ```nginx server { listen 443 ssl http2; # 关键:http2标识 server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; # ...其他配置 } ``` #### 7. **重启Nginx** ```bash sudo /usr/local/nginx/sbin/nginx -s stop sudo /usr/local/nginx/sbin/nginx ``` --- ### ⚠️ 关键注意事项 1. **依赖关系**:HTTP/2 **必须**与TLS(SSL证书)同时启用,故`--with-http_ssl_module`是强制依赖。 2. **版本要求**:Nginx ≥ 1.9.5 才原生支持`ngx_http_v2_module`。 3. **OpenSSL版本**:建议使用OpenSSL ≥ 1.0.2(支持ALPN扩展)。 4. **动态模块(可选)**: 若需动态加载模块,添加`--with-compat`和`--add-dynamic-module`参数编译,在`nginx.conf`中通过`load_module`指令加载。 --- ### 🔍 验证HTTP/2生效 - **浏览器检查**:Chrome开发者工具 → Network → Protocol列显示`h2`。 - **命令行工具**: ```bash curl -I --http2 https://example.com # 输出含"HTTP/2 200"即成功 ``` --- ### ❓ 相关问题 1. **如何为Nginx申请免费的SSL证书(如Let's Encrypt)?** 2. **如何优化Nginx的HTTP/2性能(如调整发流、头部压缩)?** 3. **若编译时缺少依赖导致报错(如`openssl not found`),应如何解决?** 4. **如何将现有Nginx升级到新版本保留模块?** > 引用说明: > [^1]: `ngx_http_access_module`的配置方法参考。 > [^2]: OpenResty的编译参数示例,展示了基础模块配置。 > [^4]: Nginx模块验证方法及路径规范示例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值