最近项目中需要用到高效的 HTTP 压缩(Brotli),以及对响应头灵活控制(headers-more-nginx-module)。官方预编译包往往不带这两个模块,必须从源码自行编译。为了提升部署效率,写了个一键脚本,实现了快速安装。
日期:2025-08-02
作者:Ji SongBin
安装环境准备
脚本支持 CentOS 和 Ubuntu,自动安装必要的依赖:gcc、pcre、zlib、openssl、git 等,确保编译环境完整。
方案核心
-
Nginx 版本:1.24.0(可根据需求替换)
-
第三方模块:
脚本流程
-
安装系统依赖
-
下载 Nginx 源码包并解压
-
克隆第三方模块仓库,初始化子模块(Brotli)
-
进入源码目录,配置编译参数,添加模块
-
编译并安装到 /usr/local/nginx
-
提示用户手动修改 nginx.conf 开启模块配置
脚本代码
#!/bin/bash
set -e
NGINX_VER="1.24.0"
PREFIX="/usr/local/nginx"
echo "==> 安装依赖"
if [ -x "$(command -v yum)" ]; then
sudo yum install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-devel git
elif [ -x "$(command -v apt)" ]; then
sudo apt update
sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev libssl-dev git
else
echo "不支持的包管理器"
exit 1
fi
echo "==> 下载源码"
wget -c http://nginx.org/download/nginx-${NGINX_VER}.tar.gz
tar zxvf nginx-${NGINX_VER}.tar.gz
echo "==> 下载模块"
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ..
git clone https://github.com/openresty/headers-more-nginx-module.git
cd nginx-${NGINX_VER}
echo "==> 配置编译参数"
./configure \
--prefix=${PREFIX} \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_gzip_static_module \
--add-module=../ngx_brotli \
--add-module=../headers-more-nginx-module
echo "==> 编译安装"
make -j$(nproc)
sudo make install
echo "==> 安装完成,nginx 安装路径: ${PREFIX}"
echo "请自行配置 ${PREFIX}/conf/nginx.conf 以启用 Brotli 和 headers-more 模块"
后续配置示例(nginx.conf)
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
http {
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss;
more_set_headers "X-Frame-Options: SAMEORIGIN";
more_set_headers "X-Content-Type-Options: nosniff";
# 其他配置...
}
总结
通过这个脚本,实现了在任意服务器快速编译带 Brotli 压缩和响应头灵活控制功能的 Nginx,适合对性能和安全性有更高要求的生产环境。后续可结合自动化运维集成,提升部署效率。