You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 16.04下Nginx+uWSGI部署Django项目mysite遇请求挂起问题

排查Nginx + uWSGI部署Django时请求挂起的问题

我帮你梳理下这个问题的排查思路——既然没启动uWSGI时访问8003能返回预期的502,说明Nginx的基础监听是正常的,问题基本出在Nginx和uWSGI的通信环节,或者uWSGI的运行配置上。

1. 先检查协议匹配性(最可能的原因)

你启动uWSGI用的是--http :8002参数,这会让uWSGI以HTTP协议监听8002端口,但如果你的Nginx配置里用的是uwsgi_pass指令(对应uWSGI专属协议)去连接8002,两者协议不兼容就会直接导致请求挂起。

  • 检查你的Nginx配置:
    • 如果配置里是uwsgi_pass 127.0.0.1:8002;,那uWSGI应该改用--socket :8002启动(--socket是uWSGI协议模式,和Nginx的uwsgi_pass对应),修改后的启动命令:
      uwsgi --socket :8002 --module mysite.wsgi --logto /tmp/uwsgi.log --master
      
    • 如果你想继续用--http参数,那Nginx里要改成HTTP反向代理模式,用proxy_pass http://127.0.0.1:8002;替换原来的uwsgi_pass配置。

2. 确认uWSGI是否真的在监听8002端口

用这个命令检查端口占用情况:

netstat -tulpn | grep 8002

如果看不到uWSGI进程,说明uWSGI启动失败或者监听地址不对,赶紧去/tmp/uwsgi.log里找错误,比如是不是找不到mysite.wsgi模块(可能是你启动uWSGI的目录不是Django项目根目录),或者权限不足。

3. 深挖Nginx错误日志的细节

你提到已经看过/var/log/nginx/error.log,可以重点搜这些关键词:

  • upstream timed out:说明Nginx能连上uWSGI,但uWSGI一直没响应,协议不匹配会出现这个情况。
  • no route to host或者connection refused:如果启动uWSGI后出现这个,可能是uWSGI只监听了127.0.0.1,但Nginx用了外网IP(192.168.0.17)访问?可以把uWSGI的监听地址改成0.0.0.0,比如--http 0.0.0.0:8002。

4. 绕过Nginx直接测试uWSGI

先直接访问http://192.168.0.17:8002,如果能正常加载Django页面,说明uWSGI本身没问题,问题肯定在Nginx配置上;如果直接访问也挂起,那就是uWSGI的配置问题,比如缺少项目目录指定,试试加上--chdir参数:

uwsgi --http :8002 --module mysite.wsgi --chdir /path/to/your/mysite-project-root --logto /tmp/uwsgi.log --master

5. 检查防火墙是否拦截端口

Ubuntu16.04默认的ufw防火墙可能会拦截8002端口,用ufw status查看防火墙状态,如果是开启的,先临时关闭测试:

ufw disable

如果关闭后访问正常,记得再添加规则开放8002端口:

ufw allow 8002/tcp

内容的提问来源于stack exchange,提问作者zoltar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:58:08