Ansible生成Nginx虚拟主机的核心是用template模块结合Jinja2模板(.j2文件),动态注入变量(如vhost_name、server_name)并条件渲染SSL等区块,部署至sites-available后通过符号链接启用,实现多环境配置复用。

在 Linux 中用 Ansible 模板生成 Nginx 虚拟主机,核心是结合 template 模块与 Jinja2 语法,把变量注入到 .conf.j2 文件中,再部署到目标机器的 sites-available/ 目录下,并通过符号链接启用。
关键点:模板不是直接写死配置,而是动态生成适配不同环境的虚拟主机文件。
✅ 准备 Nginx 虚拟主机模板(.j2 文件)
在 Ansible 项目中创建模板路径,例如:roles/nginx/templates/vhost.conf.j2
内容示例(支持多域名、自定义根目录和端口):
server {
listen {{ vhost_port | default(80) }};
server_name {{ vhost_server_name | join(' ') }};
root {{ vhost_root | default('/usr/share/nginx/html') }};
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
{% if vhost_ssl_enabled | default(false) %}
listen 443 ssl http2;
ssl_certificate {{ vhost_ssl_cert | default('/etc/ssl/nginx.crt') }};
ssl_certificate_key {{ vhost_ssl_key | default('/etc/ssl/nginx.key') }};
{% endif %}
access_log /var/log/nginx/{{ vhost_name | default('default') }}_access.log;
error_log /var/log/nginx/{{ vhost_name | default('default') }}_error.log;
}⚠️ 注意:
{{ variable }}是 Jinja2 变量占位符,运行时由 Ansible 传入值;{% if ... %}是条件逻辑,可控制 SSL 块是否渲染。
Zynq Linux Hardware Debug下载Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
✅ 在 Playbook 或 Role 的 tasks 中调用模板
例如在 roles/nginx/tasks/main.yml 中添加:
- name: Deploy nginx virtual host config
template:
src: vhost.conf.j2
dest: /etc/nginx/sites-available/{{ vhost_name | default('default') }}.conf
owner: root
group: root
mode: '0644'
- name: Enable virtual host (create symlink)
file:
src: "/etc/nginx/sites-available/{{ vhost_name | default('default') }}.conf"
dest: "/etc/nginx/sites-enabled/{{ vhost_name | default('default') }}.conf"
state: link
force: true
- name: Test nginx config and reload
command: nginx -t && systemctl reload nginx
args:
executable: /bin/bash
changed_when: false✅ 定义变量(推荐方式)
在 roles/nginx/vars/main.yml 中统一管理:
vhost_name: "example.com" vhost_server_name: - example.com - www.example.com vhost_root: "/var/www/example.com" vhost_port: 80 vhost_ssl_enabled: false
或在 playbook 中临时传入(适合多实例场景):
- name: Deploy multiple vhosts
include_role:
name: nginx
vars:
vhost_name: "blog.example.com"
vhost_server_name: ["blog.example.com"]
vhost_root: "/var/www/blog"✅ 验证与调试技巧
- 运行前加
-v查看变量渲染结果:ansible-playbook site.yml -v - 手动测试模板渲染(不执行任务):
ansible localhost -m template -a "src=templates/vhost.conf.j2 dest=/tmp/test.conf" -e "vhost_name=test vhost_server_name=['test.local']" - 确保目标机已安装
nginx并启用sites-enabled包含逻辑(检查/etc/nginx/nginx.conf是否有include /etc/nginx/sites-enabled/*;)
模板生成虚拟主机的本质,是把运维经验封装成可复用、可参数化的配置单元。只要变量设计合理,一套模板就能支撑几十个不同域名、路径、SSL 状态的站点。


















