nginx 不管理 python 应用环境变量,需通过 systemd(environment 或 environmentfile)或 shell 脚本在应用启动前注入;python 端可用 python-dotenv 按 env 自动加载对应 .env 文件,nginx 仅通过 proxy_pass 或 header 透传环境标识,严禁硬编码敏感配置。

Nginx 本身不管理 Python 应用的环境变量,它只负责反向代理、负载均衡或静态文件服务。真正需要环境变量的是后端 Python 应用(如 Django、Flask 或 FastAPI),而这些变量必须在应用启动前由运行环境注入——Nginx 不参与这一过程。
Python 应用启动前注入环境变量
推荐使用 systemd 服务文件 或 shell 启动脚本 设置环境变量,再启动 uWSGI/Gunicorn。例如,在 systemd service 文件中:
-
Environment= 直接写入键值对:
Environment=DJANGO_SETTINGS_MODULE=config.production -
EnvironmentFile= 指向 .env 文件:
EnvironmentFile=/opt/myapp/.env.production(该文件内容为SECRET_KEY=xxx、DEBUG=False等) - 确保
WorkingDirectory和User设置正确,避免权限或路径问题
配合 python-dotenv 实现多环境自动加载
在 Python 应用入口(如 wsgi.py 或 main.py)顶部添加:
from dotenv import load_dotenvload_dotenv(dotenv_path=f".env.{os.getenv('ENV', 'development')}")- 这样启动时只需设置
ENV=production,就能自动加载.env.production
注意:.env 文件必须放在应用工作目录下,且不能提交到 Git(应加入 .gitignore)。
Nginx 只做流量分发,不参与配置隔离
不同环境(dev/staging/prod)通常对应不同服务器或容器实例,Nginx 配置本身不区分“环境变量”,但可通过以下方式间接支持:
- 用不同 server 块监听不同域名或端口,分别 proxy_pass 到对应环境的 Python 进程(如
http://127.0.0.1:8001是 dev,:8002是 prod) - 在 Nginx 配置中用
proxy_set_header X-Env $host;透传环境标识,供 Python 应用读取并动态调整行为(需应用层配合) - 禁止在 Nginx 配置里硬编码密钥或数据库地址——这类信息必须交由 Python 运行时通过环境变量加载
部署时验证环境变量是否生效
可在 Python 应用健康检查接口(如 /health)中返回当前环境和关键变量状态:
- 返回
{"env": "production", "debug": false, "db_host": "*****"}(敏感字段脱敏) - 结合蓝绿部署脚本,在
nginx -s reload前调用该接口确认新版本已正确加载配置 - 用
systemctl show --property=Environment myapp.service查看实际注入的变量(调试用)
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











