TheMoon

1panel中的OpenResty启用Brotli压缩
前言宝塔面板曾经是国内适用范围最广的面板,然而似乎每个公司做大后都会想尽办法进一步收割用户。无论是绑定个人账号或者...
扫描右侧二维码阅读全文
08
2024/08

1panel中的OpenResty启用Brotli压缩

前言

宝塔面板曾经是国内适用范围最广的面板,然而似乎每个公司做大后都会想尽办法进一步收割用户。无论是绑定个人账号或者是广告植入,都难以令人继续忍受,而目前最受欢迎的替代者应该当属1panel了。
尽管采用了全容器化的部署,带来了一些上手成本,不过相对于AMH、AppNode还是更容易令人接受。
不过令人遗憾的是,官方的Docker镜像中并没有包含所依赖的库,因此没有办法直接启用,而是需要引入对应的模块文件。

快速引入

博主已经编译好了所需要的两个模块文件,因此可以直接通过下载的方式快速进行引入。
首先打开1Panel的后台页面,记录下容器的名称。

比如此处OpenResty的容器名称为1Panel-openresty-J1l8
连接到服务器,下载模块文件并复制到Docker容器内。

export CONTAINER_NAME=1Panel-openresty-J1l8
wget https://f004.backblazeb2.com/file/letertw/br.zip
unzip br.zip
docker cp ngx_http_brotli_filter_module.so $CONTAINER_NAME:/usr/local/openresty/nginx/modules/ngx_http_brotli_filter_module.so
docker cp ngx_http_brotli_static_module.so $CONTAINER_NAME:/usr/local/openresty/nginx/modules/ngx_http_brotli_static_module.so

在1Panel的面板中进入配置文件目录/opt/1panel/apps/openresty/openresty/conf,编辑nginx.conf文件
user root; 下方加入如下代码

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;


同时在gzip配置下方加入brotli的配置代码

    brotli on;
    brotli_comp_level 9;
    brotli_static on;
    brotli_types application/atom+xml application/javascript application/json application/vnd.api+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;


压缩等级和类型可以对应修改,如无特殊需要直接复制即可。
然后进入应用商店已安装应用中,执行重启即可顺利开启。

编译安装

首先下载ngx_brotli源码

git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli

然后下载对应版本的openresty源码并解压,同时进入到其中的nginx目录中

wget https://openresty.org/download/openresty-1.21.4.3.tar.gz
tar -xzvf openresty-1.21.4.3.tar.gz
cd openresty-1.21.4.3/bundle/nginx-1.21.4

安装开发环境,此处以AlmaLinux/RockyLinux为演示

dnf group install -y "Development Tools"

执行编译,此处以root文件夹为例

./configure --with-compat --add-dynamic-module=/path/to/ngx_brotli
make modules

等待编译完成后,对应编译好的模块文件将生成在objs文件夹内,下面的操作参考上方的快速引入部分即可

结语

这样的模块引用方式意味着不用去重新生成对应的Docker镜像,但是每次更新完应用之后都需要手动去进行拷贝动作,还是比较繁琐,目前正在向1Panel提交这方便的建议,希望能够尽快将两个文件直接打包进后续的镜像中。

最后修改:2024 年 08 月 08 日 04 : 10 PM

1 条评论

  1. 陈砷径

    陈砷径:文章真不错https://www.minshengtouzi.com/a/21991.html

发表评论