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

为何uWSGI Emperor搭配Nginx时Django应用出现连接过早关闭?

问题描述

手动执行uwsgi --socket lhhs/lhhs.sock --module lhhs/lhhs.wsgi --chmod-socket=664可正常启动Django应用,python manage.py test也显示应用无异常。但使用Nginx与uWSGI Emperor部署时,Nginx抛出如下错误:

upstream prematurely closed connection while reading response header from upstream, client: 74.45.12.120, server: lhhs.oh-joy.org, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///var/www/webapps/lhhs/lhhs/lhhs.sock:", host: "lhhs.oh-joy.org"

当前uWSGI配置文件(.ini)

uid = www-data
chdir=/var/www/webapps/lhhs/lhhs
home=/var/www/webapps/lhhs/env
virtualenv=/var/www/webapps/lhhs/env
module=lhhs.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/www/webapps/lhhs/log/lhhs-uwsgi.log
socket=/var/www/webapps/lhhs/lhhs/lhhs.sock
chmod-socket = 664

当前Nginx配置文件

upstream django {
     server unix:///var/www/webapps/lhhs/lhhs/lhhs.sock; # for a file socket
    #server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

server {
    listen 443 ssl;
    server_name lhhs.oh-joy.org;
    charset utf-8;
    ssl_certificate /etc/letsencrypt/live/lhhs.oh-joy.org/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/lhhs.oh-joy.org/privkey.pem; # managed by Certbot

    location /static {
    alias /var/www/webapps/lhhs/lhhs/static;
   }

    location /media {
    alias /var/www/webapps/lhhs/lhhs/media;
   }

   location /favicon.ico {
       alias /var/www/webapps/lhhs/lhhs/static/images/favicon.ico;
   }

    location / {
        include         /etc/nginx/uwsgi_params;
        uwsgi_pass      django;
    }
}

server {
    if ($host = lhhs.oh-joy.org) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name lhhs.oh-joy.org;
    return 404; # managed by Certbot
}

怀疑问题在于uWSGI Emperor模式下,即便配置了home和virtualenv参数,仍无法正确识别虚拟环境。

解决方案
  • 明确指定虚拟环境的Python解释器
    在uWSGI配置文件中添加以下参数,直接指向虚拟环境内的Python解释器和site-packages路径:

    interpreter = /var/www/webapps/lhhs/env/bin/python
    pythonpath = /var/www/webapps/lhhs/env/lib/python3.x/site-packages
    

    注意将python3.x替换为实际的Python版本号(如python3.8、python3.9)。同时根据环境添加对应的uWSGI Python插件:

    plugin = python3
    
  • 修复虚拟环境目录权限
    确保www-data用户对虚拟环境目录有完整的读取权限:

    chown -R www-data:www-data /var/www/webapps/lhhs/env
    chmod -R 755 /var/www/webapps/lhhs/env
    
  • 简化虚拟环境配置参数
    去掉配置中重复的home参数,仅保留virtualenv:

    # home=/var/www/webapps/lhhs/env  # 删除此行
    virtualenv=/var/www/webapps/lhhs/env
    
  • 排查uWSGI日志获取细节
    查看uWSGI的日志文件/var/www/webapps/lhhs/log/lhhs-uwsgi.log,里面会记录启动时的错误(如模块缺失、路径错误、权限不足等),这些信息能直接定位问题根源。

  • 重启服务应用配置
    修改配置后,重启uWSGI Emperor和Nginx服务:

    systemctl restart uwsgi
    systemctl restart nginx
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:23:11