Ansible 部署 Nginx 负载均衡的核心是“配置即代码”,通过结构化 YAML、变量分离、Jinja2 模板和角色复用,实现 LB 与 Web 服务器协同部署;需分层定义 inventory 变量,动态渲染 nginx.conf,闭环验证服务启动与代理连通性。

用 Ansible 部署 Nginx 负载均衡到集群服务器,核心是把“配置即代码”落地:一次编写,多节点批量执行,避免手动逐台敲命令带来的不一致和出错风险。关键不在写多少 YAML,而在于结构清晰、变量分离、模板驱动、角色复用。
明确集群角色划分
Nginx 负载均衡部署不是只装一个服务,而是协调多个角色协同工作。典型生产级架构至少包含三类节点:
- 负载均衡器(LB):运行 Nginx,负责反向代理与健康检查
- 后端 Web 服务器(Web Server):实际提供业务服务(如静态页、API 等)
- Ansible 控制节点:本地执行 Playbook,需能 SSH 免密访问所有目标机
例如规划如下:
[load_balancers] lb01 ansible_host=192.168.10.100 [web_servers] web01 ansible_host=192.168.10.101 web02 ansible_host=192.168.10.102
准备可复用的主机清单与变量
Inventory 文件(如 inventory.ini)要分层定义变量:
-
all:vars:全局共用项(如ansible_user=deploy、ansible_python_interpreter=/usr/bin/python3) - 组级变量(如
[load_balancers:vars]中设server_role=load_balancer和upstream_serversJinja2 动态生成 upstream 列表) - 主机级变量(如为每台 Web 服务器指定
internal_ip=10.0.0.101,用于后端真实地址)
这样后续模板中就能直接引用 {{ hostvars[host].internal_ip }},无需硬编码。
用模板动态生成 Nginx 配置
不要在 Playbook 里拼接字符串写配置,而是用 .j2 模板文件(如 templates/nginx.conf.j2):
- 在
upstream块中遍历groups['web_servers']自动生成 server 行 - 使用
{{ nginx_port }}、{{ health_check_path | default('/health') }}等变量控制行为 - 支持不同环境(测试/生产)通过传入不同变量值切换配置细节
Playbook 中只需一条 template: 任务即可将渲染后的配置推送到 LB 节点。
确保服务可靠启动与验证
部署不只是拷文件,还要闭环验证:
- 用
systemd模块启用并启动nginx服务 - 添加
handlers:当配置变更时自动 reload,而非简单 restart - 加入
uri模块做部署后探测:检查 LB 是否能成功代理到后端某台 Web 服务器的/health接口 - 可选加
debug任务输出upstream_servers实际渲染结果,便于调试
整个流程下来,从裸机到可用负载均衡入口,一条命令即可完成:
ansible-playbook -i inventory.ini deploy_lb.yml
不复杂但容易忽略的是:SSH 免密是否真正生效、Python 解释器路径是否匹配、模板中变量名是否拼错——这些细节能让 Playbook 从“能跑”变成“稳跑”。


















