uwsgi_pass指令用于Nginx将请求转发给uWSGI服务器,须嵌套在server或location块中并配合include uwsgi_params使用,支持IP端口、Unix套接字及upstream负载均衡,需配置超时、真实IP传递和静态文件分离。

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










