Nginx 配置模板化生成有四种主流方式:① Docker 环境用 .template + envsubst 自动替换变量;② include 拆分实现模块复用;③ Jinja2 等引擎批量渲染;④ 复用 H5BP 等开源结构化模板,所有方式均需 nginx -t 校验后 reload 生效。

配置模板化生成 Nginx 配置,核心是把固定结构和可变参数分离,用变量占位 + 自动替换机制实现环境适配。不需要手写每份 conf,也不依赖硬编码路径或域名。
用 .template 文件配合 envsubst 替换变量
这是 Docker 环境中最轻量、最可靠的方式。Nginx 官方镜像原生支持:
- 把配置文件命名为 xxx.conf.template(如
default.conf.template) - 在文件中用
${VAR_NAME}占位,例如:listen ${NGINX_PORT:-80};server_name ${SERVER_NAME:-localhost}; - 容器启动时,entrypoint 脚本自动扫描
/etc/nginx/templates/,调用envsubst将环境变量注入,生成真实.conf文件到/etc/nginx/conf.d/ - 确保运行时传入对应环境变量,比如
-e SERVER_NAME=api.example.com -e NGINX_PORT=443
用 include 拆分配置,实现模块复用
适合非容器环境,或需长期维护多站点的场景。主配置只保留骨架,动态加载片段:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 在
nginx.conf的http块中写:include /etc/nginx/shared/security.conf;include /etc/nginx/upstreams/backend.conf;include /etc/nginx/servers/*.conf; - 每个
include路径下放语义明确的配置片段,比如:shared/security.conf放防 XSS、点击劫持等安全头servers/app1.conf放具体服务的 server 块 - 不同环境只需切换软链接或调整
include路径,无需改主文件
用 Jinja2 或类似模板引擎批量生成
适合 CI/CD 流水线或运维平台集成:
- 写一个
server.j2模板,支持条件判断和循环:{% if ssl_enabled %}listen 443 ssl;{% endif %}upstream {{ app_name }} { {% for host in backends %}server {{ host }};{% endfor %} } - 用 Python 脚本或 Ansible 的
template模块,传入 YAML 参数渲染出最终 conf - 好处是逻辑强、可验证、能做配置校验(比如检查证书路径是否存在)
参考开源模板项目直接复用
H5BP 的 server-configs-nginx 提供了即插即用的结构化模板:
- 目录按功能划分:
h5bp/security/、h5bp/web_performance/、location/ - 每个文件都是可
include的独立片段,比如:include h5bp/security/clickjacking.conf;include h5bp/web_performance/gzip.conf; - 不强制全盘替换,挑你需要的安全或性能项复制粘贴即可
不复杂但容易忽略:所有方式都要配合 nginx -t 校验语法,再 nginx -s reload 生效。模板只是生成手段,最终生效的是被 Nginx 解析的纯文本配置。

















