一聚教程网:一个值得你收藏的教程网站

热门教程

Nginx 源码安装如何通过自动化运维脚本批量部署到多台服务器

时间:2026-08-31 09:34:47 编辑:袖梨 来源:一聚教程网

推荐以Ansible构建可复用、可验证、可回滚的Nginx源码部署流程:统一准备源码与依赖,预检主机环境,分步上传、编译、安装并清理,结合模板化配置、systemd服务管理、健康检查与二进制快照回滚机制。

源码安装 Nginx 并批量部署到多台服务器,关键不是“写一个万能脚本”,而是构建可复用、可验证、可回滚的自动化流程。手动编译虽然灵活,但极易因系统差异(如 OpenSSL 版本、GCC 选项、依赖路径)导致失败;直接用 shell 循环 SSH 执行又缺乏幂等性与错误收敛能力。推荐以 Ansible 为核心工具链,兼顾安全性、可读性和生产就绪性。

准备源码与编译环境

在控制节点统一准备:下载 Nginx 源码包(如 nginx-1.24.0.tar.gz)、所需模块(如 lua-nginx-module、headers-more)、以及编译依赖清单(gcc、make、pcre-devel、openssl-devel、zlib-devel)。所有文件放入 Ansible 的 files/ 目录下。不建议在远程主机上 wget,避免网络波动或镜像失效。

编写一个预检 playbook(如 precheck.yml),检查每台目标主机是否满足:内核版本 ≥ 3.10、可用内存 ≥ 1GB、磁盘空间 ≥ 500MB、基础开发包已安装。未通过的节点自动跳过后续步骤并告警。

用 Ansible Playbook 编译并安装

核心逻辑分三步:上传源码 → 远程编译安装 → 清理临时文件。不依赖远程主机已有构建工具链,全部由 playbook 显式声明:

  1. 使用 unarchive 模块解压源码到 /tmp/nginx-src,设置 copy: no 表示从控制节点拉取
  2. shell 模块执行 configure 命令,明确指定 --prefix=/usr/local/nginx--with-http_ssl_module 等参数,禁用交互(creates 参数防止重复执行)
  3. command 模块依次执行 make -j$(nproc)make install,添加 args: executable: /bin/bash 支持管道和变量
  4. 最后用 file 模块创建软链接 /usr/local/nginx/conf/nginx.conf 指向 Git 管理的标准化配置模板

配置管理与服务注册

编译安装只是开始。真正体现自动化价值的是配置与服务治理:

  1. template 模块渲染 nginx.conf,变量来自 group_vars 或 host_vars(如 worker_processes: "{{ ansible_processor_vcpus | int }}"
  2. 为 systemd 创建 /usr/lib/systemd/system/nginx.service 文件,定义 Type=forkingPIDFile 和 reload 命令,确保 systemctl daemon-reload 后可管理
  3. service 模块启动并启用服务,设置 enabled: yesstate: started,Ansible 自动处理依赖关系
  4. 添加 uri 模块做健康检查:访问 http://{{ inventory_hostname }}:80,响应码为 200 则标记成功,否则触发回滚(调用上一版二进制备份)

安全加固与持续维护

源码部署后必须闭环安全与升级机制:

  1. 禁止 root 启动 worker 进程:在 template 中注入 user nginx;,并用 user 模块创建 nginx 用户和组
  2. 关闭 server_tokens:通过 jinja2 条件判断 {% if env == 'prod' %}server_tokens off;{% endif %}
  3. 建立二进制快照机制:每次 make install 前,用 shell 模块执行 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-$(date +%Y%m%d)
  4. 升级时只需替换新二进制 + reload 配置,失败则用 cp /usr/local/nginx/sbin/nginx-20260810 /usr/local/nginx/sbin/nginx 回退

热门栏目