nginx通过envsubst工具结合环境变量占位符(如${api_url})实现动态代理配置,支持一套模板多环境复用;启动时自动替换生成真实配置,配合entrypoint脚本和ssl相关变量可灵活控制https验证等策略。

在 Nginx 中配置代理后端时使用特定环境参数,核心思路是**让静态配置具备动态能力**——Nginx 原生不直接读取运行时环境变量,但可通过外部机制注入,实现“一套配置、多环境复用”。关键不在写死地址,而在构建可替换的配置流程。
用环境变量占位符定义配置模板
在 /etc/nginx/conf.d/default.conf 或自定义配置文件中,不写死后端地址,改用占位符(如 ${API_URL}、${AUTH_HOST}):
proxy_pass http://${API_URL}:8080/;proxy_pass https://${AUTH_HOST}/oauth;-
set $backend_scheme ${BACKEND_SCHEME};(配合proxy_pass $backend_scheme://...)
注意:占位符必须用大括号包裹(${VAR}),且不能出现在 Nginx 原生命令关键字位置(如 listen ${PORT} 不合法,需用其他方式处理)。
启动时用 envsubst 替换占位符
在容器或部署脚本中,通过 envsubst 工具将环境变量值写入真实配置文件:
- 先设置环境变量:
export API_URL=10.0.1.5:9001 AUTH_HOST=idp.prod.example.com - 执行替换:
envsubst /etc/nginx/conf.d/default.conf - 再启动 Nginx:
nginx -t && nginx -g "daemon off;"
该方式轻量、标准,无需额外依赖,Docker 官方镜像默认已包含 envsubst。
通过 entrypoint 脚本自动完成注入
在 Docker 环境中,把替换逻辑封装进 entrypoint.sh,每次容器启动自动生效:
- 脚本中加入:
envsubst /etc/nginx/conf.d/default.conf - Dockerfile 中声明:
ENTRYPOINT ["/docker-entrypoint.sh"] - 运行时传参:
docker run -e API_URL=staging-api:8000 -e BACKEND_SCHEME=https ...
这样运维只需改环境变量,无需重建镜像,也避免手动修改配置文件出错。
HTTPS 后端需额外处理 SSL 验证开关
当 proxy_pass 指向 HTTPS 后端时,环境变量还可控制安全策略:
-
proxy_ssl_verify ${SSL_VERIFY:-off};(默认关闭,生产环境设为on) proxy_ssl_trusted_certificate /etc/ssl/certs/${CA_BUNDLE:-ca.crt};- 搭配
proxy_ssl_name和proxy_ssl_server_name on支持 SNI
这类参数对测试/开发环境跳过证书校验很实用,但上线前务必通过环境变量显式开启验证。











