599 字
3 分钟
Nginx 配置 Brotli 压缩算法
前言
- 互联网冲浪的时候发现了 Brotli 这个压缩算法,看上去比现在使用的 gzip 效果好,于是就想尝试在 Nginx 上部署一下
配置过程
下载源码
-
下载 Google 开源的 ngx_brotli 代码仓库
Terminal window # 下载到 /usr/srccd /usr/srcgit clone https://github.com/google/ngx_brotli.git -
然后下载 Google 的 Brotli 源码
Terminal window cd /usr/src/ngx_brotli/depsrm -rf brotligit clone https://github.com/google/brotli.gitcd /usr/src/ngx_brotligit submodule update --init -
对 Brotli 源码进行编译,
漏了这一步会导致后面 make modules 时报错Terminal window cd /usr/src/ngx_brotli/deps/brotlimkdir out && cd outcmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./installed ..cmake --build . --config Release --target install
通过 Nginx 编译模块
-
Nginx 自 1.9.11 以后版本后支持动态模块加载,也就不需要重新进行编译 Nginx
-
需要下载与当前 Nginx 版本一致的 Nginx 安装包用于编译模块
Terminal window # 查看当前 Nginx 版本nginx -v# 在 /usr/src 目录下载 Nginx 源码并解压(以 1.18.0 为例)cd /usr/srcwget http://nginx.org/download/nginx-1.18.0.tar.gztar -zxvf nginx-1.18.0.tar.gz -
进行编译
Terminal window cd nginx-1.18.0./configure --with-compat --add-dynamic-module=/usr/src/ngx_brotlimake modules -
编译的结果会出现在 objs 目录下
objs/ngx_http_brotli_filter_module.so ls objs/*.so# 出现以下两个文件则表明编译成功# objs/ngx_http_brotli_static_module.soNOTE
如果出现报错,有可能是相关的库没有安装,例如 PCRE、libbrotli-dev……,请根据报错安装所需的库
配置 Nginx
-
将上面编译好的两个
.so文件拷贝到 /etc/nginx/modules 下Terminal window # 若没有 modules 目录则手动创建一个mkdir -p /etc/nginx/modules# 在 /usr/src/ngx_brotli/nginx-1.18.0 下执行cp objs/{ngx_http_brotli_filter_module.so,ngx_http_brotli_static_module.so} /etc/nginx/modules -
为方便管理 Nginx动态模块,建议新建一个 modules.conf 文件对动态模块进行单独管理
Terminal window touch /etc/nginx/modules.conf -
在 modules.conf 文件中添加以下内容
Terminal window # Brotli模块load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;load_module /etc/nginx/modules/ngx_http_brotli_static_module.so; -
修改 /etc/nginx/nginx.conf 配置文件,在其中引入 modules.conf
Terminal window # 在前几行中找一处地方进行添加include /etc/nginx/modules.conf; -
在 /etc/nginx/nginx.conf 中的 http 下加入 Brotli 算法配置
-
Brotli 和 gzip 是可以并存的,无需关闭 gzip
http {...### Brotli 配置##brotli on;brotli_comp_level 6;brotli_buffers 16 8k;brotli_min_length 20;brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;...} -
在反向代理配置文件中加入 Brotli 配置,例如 /etc/nginx/sites-available/default 中
server {...location / {...proxy_set_header Accept-Encoding "";...}} -
重启 Nginx,无报错则表明配置成功
Terminal window nginx -s reload
测试是否启用 Brotli 压缩
curl -I -H 'Accept-Encoding: br' {http://your_domain.com}# 若回复的响应头中出现 Content-Encoding: br 则表明启用成功参考
Nginx 配置 Brotli 压缩算法
https://suburbiaxx.fun/posts/ed097f46/
浙公网安备33070202666668号