跳过正文
  1. 文章/

Nginx 配置 Brotli 压缩算法

·687 字·2 分钟
SuburbiaXX
作者
SuburbiaXX
Life is full of regrets.
目录

前言
#

  • 互联网冲浪的时候发现了 Brotli 这个压缩算法,看上去比现在使用的 gzip 效果好,于是就想尝试在 Nginx 上部署一下

配置过程
#

下载源码
#

  • 下载 Google 开源的 ngx_brotli 代码仓库

    1# 下载到 /usr/src
    2cd /usr/src
    3git clone https://github.com/google/ngx_brotli.git
  • 然后下载 Google 的 Brotli 源码

    1cd /usr/src/ngx_brotli/deps
    2rm -rf brotli
    3git clone https://github.com/google/brotli.git
    4cd /usr/src/ngx_brotli
    5git submodule update --init
  • 对 Brotli 源码进行编译,漏了这一步会导致后面 make modules 时报错

    1cd /usr/src/ngx_brotli/deps/brotli
    2mkdir out && cd out
    3cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./installed ..
    4cmake --build . --config Release --target install

通过 Nginx 编译模块
#

  • Nginx 自 1.9.11 以后版本后支持动态模块加载,也就不需要重新进行编译 Nginx

  • 需要下载与当前 Nginx 版本一致的 Nginx 安装包用于编译模块

    1# 查看当前 Nginx 版本
    2nginx -v
    3# 在 /usr/src 目录下载 Nginx 源码并解压(以 1.18.0 为例)
    4cd /usr/src
    5wget http://nginx.org/download/nginx-1.18.0.tar.gz
    6tar -zxvf nginx-1.18.0.tar.gz
  • 进行编译

    1cd nginx-1.18.0
    2./configure --with-compat --add-dynamic-module=/usr/src/ngx_brotli
    3make modules
  • 编译的结果会出现在 objs 目录下

    1ls objs/*.so
    2# 出现以下两个文件则表明编译成功
    3# objs/ngx_http_brotli_filter_module.so
    4# objs/ngx_http_brotli_static_module.so
    如果出现报错,有可能是相关的库没有安装,例如 PCRElibbrotli-dev……,请根据报错安装所需的库

配置 Nginx
#

  • 将上面编译好的两个 .so 文件拷贝到 /etc/nginx/modules 下

    1# 若没有 modules 目录则手动创建一个
    2mkdir -p /etc/nginx/modules
    3# 在 /usr/src/ngx_brotli/nginx-1.18.0 下执行
    4cp objs/{ngx_http_brotli_filter_module.so,ngx_http_brotli_static_module.so} /etc/nginx/modules
  • 为方便管理 Nginx动态模块,建议新建一个 modules.conf 文件对动态模块进行单独管理

    1touch /etc/nginx/modules.conf
  • 在 modules.conf 文件中添加以下内容

    1# Brotli模块
    2load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;
    3load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;
  • 修改 /etc/nginx/nginx.conf 配置文件,在其中引入 modules.conf

    1# 在前几行中找一处地方进行添加
    2include /etc/nginx/modules.conf;
  • 在 /etc/nginx/nginx.conf 中的 http 下加入 Brotli 算法配置

  • Brotli 和 gzip 是可以并存的,无需关闭 gzip

     1http {
     2  ...
     3	##
     4	# Brotli 配置 
     5	##
     6	brotli on;
     7    brotli_comp_level 6;
     8    brotli_buffers 16 8k;
     9    brotli_min_length 20;
    10    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;
    11  ...
    12}
    
  • 在反向代理配置文件中加入 Brotli 配置,例如 /etc/nginx/sites-available/default 中

    1server {
    2  ...
    3  location / {
    4    ...
    5    proxy_set_header Accept-Encoding "";
    6    ...
    7  }
    8}
    
  • 重启 Nginx,无报错则表明配置成功

    1nginx -s reload

测试是否启用 Brotli 压缩
#

1curl -I -H 'Accept-Encoding: br' {http://your_domain.com}
2# 若回复的响应头中出现 Content-Encoding: br 则表明启用成功

参考
#

Nginx 开启 Brotli 压缩算法

Brotli压缩算法的vue打包与Nginx配置

本文作者: SuburbiaXX
本文链接: https://suburbiaxx.fun/posts/ed097f46/
版权声明: 本博客在未特别注明下默认使用 CC BY-NC-SA 4.0 许可协议。