nginx不运行python代码,仅作反向代理处理静态文件、ssl终止等;wsgi服务器(uwsgi/gunicorn)负责加载python应用并执行逻辑:uwsgi用uwsgi协议通信,需uwsgi_pass+include uwsgi_params;gunicorn用http协议,需proxy_pass及正确header透传。

Nginx 本身不直接运行 Python 代码,必须通过 WSGI 服务器(如 uWSGI 或 Gunicorn)作为中间层。它的角色是反向代理:接收客户端请求,将动态请求转发给 WSGI 服务,同时高效处理静态文件、SSL 终止、负载均衡和安全防护。
明确 Nginx 与 WSGI 服务器的分工
理解这个分层结构是配置正确的前提:
- Nginx:不解析 Python,只做 HTTP 层工作——路由、缓存、压缩、日志、静态资源(CSS/JS/图片)直接响应
-
WSGI 服务器(uWSGI/Gunicorn):加载 Python 应用(如
wsgi.py),管理进程/线程,执行业务逻辑,返回标准 HTTP 响应 -
通信协议:Nginx 与 uWSGI 推荐用
uwsgi协议(性能最优);与 Gunicorn 则用标准http协议
uWSGI 场景下的 Nginx 配置要点
当后端使用 uWSGI 时,Nginx 需启用 ngx_http_uwsgi_module,关键配置如下:
Python Linux版 为 Python.org 官方提供的 Python 3.14.6 Linux/Unix 源码包,适合在Linux/Unix环境中安装、运行 Python 代码并学习函数、模块和脚本开发。
- 用
uwsgi_pass指向 uWSGI 监听地址(如127.0.0.1:9000或 Unix socketunix:/tmp/myapp.sock) - 必须包含
include uwsgi_params;—— 它预定义了几十个uwsgi_param,把客户端真实 IP、协议类型等关键信息透传给 uWSGI - 避免仅写
proxy_pass,那是给 HTTP 后端用的;uWSGI 要求专用指令
示例片段:
location / {
uwsgi_pass 127.0.0.1:9000;
include uwsgi_params;
uwsgi_read_timeout 300;
}
Gunicorn 场景下的 Nginx 配置要点
Gunicorn 自身提供 HTTP 接口,Nginx 将其视为普通 HTTP 后端:
- 使用
proxy_pass http://127.0.0.1:8000;(Gunicorn 默认监听 8000) - 必须设置关键 header,确保应用获知原始请求信息:
proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;
- 建议添加超时控制:
proxy_connect_timeout 60;、proxy_send_timeout 60;、proxy_read_timeout 60;
通用安全与健壮性补充
无论选 uWSGI 还是 Gunicorn,以下配置都建议加入:
- 限制请求体大小:
client_max_body_size 50M;(防止上传攻击或 OOM) - 隐藏服务指纹:
server_tokens off;(减少暴露 Nginx 版本) - 启用 HSTS(若已配 HTTPS):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - 对
/static/和/media/路径做本地文件服务,不转发给 Python:location /static/ { alias /var/www/myapp/static/; }
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










