标准nginx自动化编译脚本需识别系统发行版并安装对应依赖,下载校验源码包,安全configure编译,集成systemd服务并完成三层验证。

编写标准的 Nginx 自动化编译脚本,核心是把人工操作中易错、重复、依赖环境的环节全部封装成可验证、可复用、有容错的 Shell 逻辑。不追求“一次跑通”,而要确保在 CentOS、Ubuntu 等主流系统上都能安全执行,且失败时能明确提示原因。
识别系统并安装对应依赖
不同发行版的包管理器和依赖名不同,脚本必须主动判断:
- 读取 /etc/os-release 中的 ID 字段(如 ubuntu、centos、rocky、debian)
- 对 Debian/Ubuntu 系列,安装 build-essential、libpcre3-dev、zlib1g-dev、libssl-dev
- 对 RHEL/CentOS/Rocky 系列,安装 gcc、make、pcre-devel、zlib-devel、openssl-devel
- 检查 tar、wget、awk、lscpu、useradd 是否可用,缺失则中止并提示
- 避免直接调用 apt-get 或 yum 前不检测命令是否存在
下载与校验源码包
不能硬写 URL 或版本号,也不能跳过完整性校验:
- 将 NGINX_VERSION="1.28.0" 和 NGINX_URL="https://nginx.org/download/" 设为变量
- 用 wget -q --spider ${NGINX_URL}nginx-${NGINX_VERSION}.tar.gz 预检链接有效性
- 下载 nginx-${NGINX_VERSION}.tar.gz 和配套的 SHA256SUMS 文件
- 用 sha256sum -c SHA256SUMS 2>&1 | grep OK 验证包未被篡改或损坏
- 解压前检查目标目录是否为空,防止覆盖已有服务
配置、编译与安装控制
configure 是成败关键,参数需兼顾安全性、功能性和资源适配:
- 指定用户与路径:--prefix=/usr/local/nginx --user=nginx --group=nginx
- 启用必要模块:--with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-stream
- 禁用调试符号:--without-debug 减小二进制体积
- 自动获取 CPU 核心数:make -j$(lscpu | awk '/^CPU\(s\)/{print $2}')
- 安装后立即运行 /usr/local/nginx/sbin/nginx -t 检查配置语法
集成 systemd 并验证服务状态
安装完成 ≠ 可用,必须让 Nginx 成为受管服务:
- 为 systemd 创建 /lib/systemd/system/nginx.service,含 Type=forking、PIDFile、ExecStartPre(预检配置)等字段
- 重载 daemon:systemctl daemon-reload
- 启动服务并设开机自启:systemctl enable --now nginx
- 最后执行三层验证:systemctl is-active nginx、curl -I http://127.0.0.1、ss -tlnp | grep :80











