更加智能的自动同步 NGINX 配置文件工具

大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构!
关注、发送C1即可获取JetBrains全家桶激活工具和码!
每次在远程服务器上更新 NGINX 配置、重启服务、检查是否有配置错误,然后还得在多个环境重复操作——是不是觉得这事儿太费劲?这篇文章教你如何用 Ansible 优雅地解决这个痛点。
![image]()
项目结构概览
首先,初始化一个 Ansible 角色目录:
ansible-galaxy init roles/nginx-conf-sync
生成的目录结构如下:
hex-ansible
├─ README.md
├─ hosts.ini 
├─ nginx-conf-sync-playbook.yml
├─ nginx-purge-playbook.yml
└─ roles
   └─ nginx-conf-sync
      ├─ defaults/main.yml
      ├─ files/
      │  ├─ blog.dev.to
      │  ├─ dev.to
      │  └─ api.dev.to
      ├─ handlers/main.yml
      ├─ meta/main.yml
      ├─ tasks/main.yml
      ├─ tasks/create-nginx-confs.yml
      ├─ templates/
      ├─ tests/
      │  ├─ inventory
      │  └─ test.yml
      └─ vars/main.yml
所有实际的 NGINX 配置文件都放在 files/ 目录中。例如 files/blog.dev.to 的配置内容如下:
server {
    listen 80;
    server_name blog.dev.to;
    access_log  /var/log/nginx/nginx_access.log;
    error_log   /var/log/nginx/nginx_error.log  debug;
    location / {
        include proxy_params;
        proxy_pass http://127.1.22.71:9080;
    }
}
配置 Inventory 文件
hosts.ini 文件指定了远程主机的连接方式:
[master]
master ansible_host=128.122.213.172 ansible_user=root ansible_ssh_private_key_file=~/.ssh/secret.txt
确保你已经配置好了 SSH 私钥,能够无密码连接目标机器。
配置默认变量
在 defaults/main.yml 中声明需要同步的配置文件:
---
nginx_conf_domains:
  - blog.dev.to
  - dev.to
  - api.dev.to
编写 Playbook
在项目根目录下创建 nginx-conf-sync-playbook.yml:
- name: Sync NGINX Configs
  hosts: master
  become: yes
  roles:
    - nginx-conf-sync
编排任务逻辑
在 roles/nginx-conf-sync/tasks/main.yml 中引入核心任务文件:
---
- import_tasks: create-nginx-confs.yml
真正的任务逻辑写在 create-nginx-confs.yml 中:
---
- name: Ensure NGINX config directory exists
  file:
    path: "/etc/nginx/sites-available"
    state: directory
- name: Ensure NGINX enabled directory exists
  file:
    path: "/etc/nginx/sites-enabled"
    state: directory
- name: Create .htpasswd file for basic auth
  copy:
    dest: /etc/nginx/.htpasswd
    content: |
      hexmos:$apr1$v5j1xXVg$i6XGv4RoQGT2FwqpKsJcs0
    owner: root
    group: root
    mode: "0640"
- name: Sync nginx conf files
  copy:
    src: "{{ item }}"
    dest: "/etc/nginx/sites-available/{{ item }}"
  with_items: "{{ nginx_conf_domains }}"
- name: Create symlinks in sites-enabled
  file:
    src: "/etc/nginx/sites-available/{{ item }}"
    dest: "/etc/nginx/sites-enabled/{{ item }}"
    state: link
    force: yes
  with_items: "{{ nginx_conf_domains }}"
- name: Reload nginx
  service:
    name: nginx
    state: reloaded
一键执行
只需运行下面一条命令,即可同步所有 NGINX 配置并重载服务:
ansible-playbook -i hosts.ini nginx-conf-sync-playbook.yml
总结
使用 Ansible 管理 NGINX 配置,不仅节省时间,而且流程规范、可重复。你只需将配置文件放入角色目录,在 defaults 中声明一下,然后运行 Playbook,一切就绪。
自动化运维的优势:
- ✅ 效率提升:配置同步、服务重启一键搞定
- ✅ 可移植性强:支持多环境部署
- ✅ 版本可控:所有配置文件都可纳入 Git 管理
- ✅ 可拓展性高:可轻松扩展至其他服务配置同步
借助像 Ansible 这样的自动化工具,运维工作可以不再是体力活,而是可维护、可测试、可审计的流程工程。
如需更进一步的自动化管理,不妨将这套流程与 CI/CD 集成,打造一体化部署体验。欢迎点赞、收藏、留言交流你的实战经验!

 
                    
                     
                    
                 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号