uwsgi_pass指令用于Nginx将请求转发给uWSGI服务器,须嵌套在server或location块中并配合include uwsgi_params使用,支持IP端口、Unix套接字及upstream负载均衡,需配置超时、真实IP传递和静态文件分离。
在 Nginx 中,
指令用于将 HTTP 请求转发给 uWSGI 服务器(常用于部署 Python Web 应用,如 Django、Flask),它工作在
块内的
或
上下文中,**不是**直接写在顶层
块里,而是嵌套在具体的请求处理逻辑中。
uwsgi_pass 必须配合 uwsgi_params 使用
uWSGI 协议不是标准 HTTP,Nginx 需要将客户端请求的元信息(如请求方法、路径、头信息等)转换为 uWSGI 能识别的变量格式。官方提供的
文件(通常位于
)已定义好这些映射关系。
正确写法示例:
⚠️ 若遗漏
,uWSGI 很可能收不到
、
等关键变量,导致应用 404 或路由异常。
立即学习
“
Python免费学习笔记(深入)
”;
uwsgi_pass 支持多种后端地址格式
目标 uWSGI 实例可部署在本地或远程,支持以下写法:
IP + 端口
:
(最常用,要求 uWSGI 启动时监听 TCP)
Unix 域套接字
:
(性能略优,需注意 Nginx 进程对 socket 文件的读取权限)
上游服务器组(负载均衡)
:
,配合
块使用
常见配置组合与注意事项
实际部署中,仅靠
不够,还需补充基础适配项:
设置超时
:uWSGI 处理可能较慢,建议增加
(默认 60s)
传递真实客户端 IP
:若前端有代理,加
静态文件不走 uWSGI
:用独立
规则匹配
或
,直接由 Nginx 服务
检查 uWSGI 状态
:确保 uWSGI 已启动且监听地址与
一致,可用
或
验证
验证是否生效的小技巧
修改配置后执行
测试语法,再
。若请求返回 502 Bad Gateway,大概率是 uWSGI 未运行、地址不匹配或权限问题;若返回 500,则可能是 uWSGI 应用本身报错,需查 uWSGI 日志(如
)。
uwsgi_passhttpserverlocationhttpuwsgi_params/etc/nginx/uwsgi_params
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001;
}
include uwsgi_params;PATH_INFOQUERY_STRINGuwsgi_pass 127.0.0.1:3031;uwsgi_pass unix:/run/uwsgi/app.sock;uwsgi_pass backend_uwsgi;upstreamuwsgi_passuwsgi_read_timeout 300;uwsgi_param HTTP_X_FORWARDED_FOR $proxy_add_x_forwarded_for;location/static//media/uwsgi_passnetstat -tlnp | grep :8001ls -l /run/uwsgi/app.socknginx -tnginx -s reload--logto /var/log/uwsgi/app.log