跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Nginx中http块uwsgi_pass实现对Python应用的转发

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 或路由异常。 立即学习 “ Python免费学习笔记(深入) ”; 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
)。

相关文章