brotli

描述

brotli 插件可以动态的设置 Nginx 中的 brotli 的行为。

前提条件

该插件依赖 brotli 共享库。

如下是构建和安装 brotli 共享库的示例脚本:

  1. wget https://github.com/google/brotli/archive/refs/tags/v1.1.0.zip
  2. unzip v1.1.0.zip
  3. cd brotli-1.1.0 && mkdir build && cd build
  4. cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/brotli ..
  5. sudo cmake --build . --config Release --target install
  6. sudo sh -c "echo /usr/local/brotli/lib >> /etc/ld.so.conf.d/brotli.conf"
  7. sudo ldconfig

属性

名称类型必选项默认值有效值描述
typesarray[string] or “False[“text/html”]动态设置 brotli_types 指令。特殊值 ““ 用于匹配任意的 MIME 类型。
min_lengthintegerFalse20>= 1动态设置 brotli_min_length 指令。
comp_levelintegerFalse6[0, 11]动态设置 brotli_comp_level 指令。
modeintegerFalse0[0, 2]动态设置 brotli decompress mode,更多信息参考 RFC 7932
lgwinintegerFalse19[0, 10-24]动态设置 brotli sliding window sizelgwin 是滑动窗口大小的以 2 为底的对数,将其设置为 0 会让压缩器自行决定最佳值,更多信息请参考 RFC 7932
lgblockintegerFalse0[0, 16-24]动态设置 brotli input block sizelgblock 是最大输入块大小的以 2 为底的对数,将其设置为 0 会让压缩器自行决定最佳值,更多信息请参考 RFC 7932
http_versionnumberFalse1.11.1, 1.0gzip_http_version 指令类似,用于识别 http 的协议版本。
varybooleanFalsefalsegzip_vary 指令类似,用于启用或禁用 Vary: Accept-Encoding 响应头。

启用插件

如下示例中,在指定的路由上启用 brotli 插件:

brotli - 图1note

您可以这样从 config.yaml 中获取 admin_key 并存入环境变量:

  1. admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g')
  1. curl -i http://127.0.0.1:9180/apisix/admin/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
  2. {
  3. "uri": "/",
  4. "plugins": {
  5. "brotli": {
  6. }
  7. },
  8. "upstream": {
  9. "type": "roundrobin",
  10. "nodes": {
  11. "httpbin.org": 1
  12. }
  13. }
  14. }'

使用示例

通过上述命令启用插件后,可以通过以下方法测试插件:

  1. curl http://127.0.0.1:9080/ -i -H "Accept-Encoding: br"
  1. HTTP/1.1 200 OK
  2. Content-Type: text/html; charset=utf-8
  3. Transfer-Encoding: chunked
  4. Connection: keep-alive
  5. Date: Tue, 05 Dec 2023 03:06:49 GMT
  6. Access-Control-Allow-Origin: *
  7. Access-Control-Allow-Credentials: true
  8. Server: APISIX/3.6.0
  9. Content-Encoding: br
  10. Warning: Binary output can mess up your terminal. Use "--output -" to tell
  11. Warning: curl to output it to your terminal anyway, or consider "--output
  12. Warning: <FILE>" to save to a file.

删除插件

当您需要禁用 brotli 插件时,可以通过以下命令删除相应的 JSON 配置,APISIX 将会自动重新加载相关配置,无需重启服务:

  1. curl http://127.0.0.1:9180/apisix/admin/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
  2. {
  3. "uri": "/",
  4. "upstream": {
  5. "type": "roundrobin",
  6. "nodes": {
  7. "httpbin.org": 1
  8. }
  9. }
  10. }'