ansible 批量更新 nginx 配置,以及失败时的自动回滚样例

简介:

本文基于 ansible 2.3.0.0 编写

我们目前有 8 个大区共 24 台 nginx 服务器,每个区除了 upstream 地址不同,其它配置参数都一样。自从使用了 ansible 来维护更新后,工作变得非常轻松,几分钟内就可以更新所有 24 台服务器的 nginx 配置。并且实现了检查配置有误后,自动恢复上一次配置的机制。

以下就以此为例,展示如何利用 ansible 在自动化部署 nginx 时,如何规避错误的配置。

首先看看我的 nginx role 目录结构

deploy.Nginx/
├── files
│   └── nginx.conf
├── handlers
│   └── main.yml
├── tasks
│   ├── Debian.yml
│   ├── main.yml
│   └── sites_conf_test.yml
└── templates
    ├── cms_console_newtouch_com.j2
    └── console_newtouch_com.j2

roles/deploy.Nginx/tasks/main.ymlinclude sites_conf_test.yml 的代码片段:

- include: sites_conf_test.yml
  vars:
    - file: '{{ item }}'
  with_items:
    - 'console_newtouch_com'

这里传递了变量 file 的值给 sites_conf_test.yml,这样我们可以扩展配置多个站点配置文件。


roles/deploy.Nginx/tasks/sites_conf_test.yml 的代码:

- name: Create ~/'{{ file }}.conf'
  template:
    src: '../templates/{{ file }}.j2'
    dest: '~/{{ file }}.conf'
  register: createResult

- block:
    - name: Copy '~/{{ file }}.conf'
      copy:
        src: '~/{{ file }}.conf'
        dest: '/etc/nginx/sites-enabled/{{ file }}.conf'
        backup: yes
        remote_src: yes
      register: copyResult
      when: createResult.changed
    - name: 'Test {{ file }}.conf config'
      command: nginx -t
      notify: Reload nginx service
      when: copyResult.changed
  rescue:
    - name: '{{ file }}.conf test failed, rolling backup file.'
      copy:
        src: '{{ copyResult.backup_file }}'
        dest: '/etc/nginx/sites-enabled/{{ file }}.conf'
        remote_src: yes

代码解析:

  1. 首先使用 template 模块,在服务器上生成 nginx 站点的配置文件。
  2. 2.3.0.0 有个问题还没解决,就是 template 模块的 backup 参数,并不会返回备份文件的名称,所以只能曲线救国,先创建一个临时的文件。
  3. 然后,重点就在这个 block 编排里。第一个 task 是把生成的 console_newtouch_com.conf 文件拷贝到 /etc/nginx/sites-enabled/ 目录下,因为启用了 backup 参数,所以 copyResult 会包含 backup_file 的绝对路径地址名称。这个就用在配置回滚操作中。
  4. 第二个 task 就是执行 nginx -t 来确认新配置文件是否正确了。如果失败了,就会触发 rescue 里的任务。我们只需要把备份文件恢复,保证服务器上的配置是好的。

同理可以用在更新 nginx.conf 的操作里。

目录
相关文章
|
14天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
21天前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
201 0
|
26天前
|
应用服务中间件 Linux nginx
Jetson 环境安装(四):jetson nano配置ffmpeg和nginx(亲测)之编译错误汇总
这篇文章是关于在Jetson Nano上配置FFmpeg和Nginx时遇到的编译错误及其解决方案的汇总。
70 4
|
7天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
nginx配置反向代理404问题
|
1天前
|
应用服务中间件 网络安全 PHP
八个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
Nginx 是一个高效的 HTTP 服务器和反向代理,擅长处理静态资源、负载均衡和网关代理等任务。其配置主要通过 `nginx.conf` 文件完成,但复杂设置可能导致错误。本文介绍了几个开源的 Nginx 可视化配置系统,如 Nginx UI、VeryNginx、OpenPanel、Ajenti、Schenkd nginx-ui、EasyEngine、CapRover 和 NGINX Agent,帮助简化和安全地管理 Nginx 实例。
|
26天前
|
编解码 Ubuntu 应用服务中间件
Jetson 环境安装(三):jetson nano配置ffmpeg和nginx(亲测)
本文介绍了在NVIDIA Jetson Nano上配置FFmpeg和Nginx的步骤,包括安装、配置和自启动设置。
113 1
Jetson 环境安装(三):jetson nano配置ffmpeg和nginx(亲测)
|
11天前
|
缓存 负载均衡 应用服务中间件
Nginx配置
【10月更文挑战第22天】在实际配置 Nginx 时,需要根据具体的需求和环境进行调整和优化。同时,还需要注意配置文件的语法正确性和安全性。
30 7
|
20天前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。
|
24天前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
108 7
|
26天前
|
缓存 前端开发 应用服务中间件
CORS跨域+Nginx配置、Apache配置
CORS跨域+Nginx配置、Apache配置
104 7