【问题标题】:django nginx uwsgi not workingdjango nginx uwsgi 不工作
【发布时间】:2025-11-22 06:15:01
【问题描述】:

我创建了一个不使用虚拟环境的 django 应用程序。我已经安装了 nginx 并尝试通过 uwsgi 应用程序集成它们。 这是我的配置文件。

[uwsgi]
chdir = /home/elastic/workspace/ES_Brevetti
wsgi-file = ES_Brevetti/wsgi.py
master = true
processes = 5
uid = nginx
gid = nginx
socket = unix:///socket/uwsgi.sock
chmod-socket = 666
vacuum = true

我已经创建了文件 /sockect/uwsgi.sock,权限为 777

chown nginx:nginx -R /sockect/uwsgi.sock

及以下 nginx 配置文件:

upstream django {
    server unix:///socket/uwsgi.sock; # for a file socket
    #server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
server {
    listen 80;
    server_name 10.184.2.231;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    charset utf-8;

    location /static/ { 
        alias /home/elastic/workspace/ES_Brevetti;
    }

    location / {
        include         uwsgi_params;
        uwsgi_pass      unix:///socket/uwsgi.sock;
    }
}

当我启动“systemctl start nginx”时,nginx 启动时出现错误: 连接到上游时,connect() 到 unix:///socket/uwsgi.sock 失败(111:连接被拒绝),

当我运行 uwsgi --ini /etc/uwsgi/sites/ES_Brevetti.ini 时,它不会出现错误:

.....
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
bind(): Permission denied [core/socket.c line 230]

我做错了什么?在谷歌上,我只能在不使用虚拟环境时看到带有 VENV 的配置。

【问题讨论】:

  • 现在 uwsgi 已启动并运行,但继续收到以下错误:502 Bad Gateway 和 nginx 日志文件我得到“connect() to unix:///socket/uwsgi.sock failed (111 :连接被拒绝)同时连接到上游”。有什么帮助吗?
  • 你说运行 uwsgi 运行不会出错,但是输出显示错误bind(): Permission denied,看起来和你的111: Connection refused 错误一样。这表明您的套接字没有正确的所有权/权限。您能否显示套接字的权限并说明您正在以什么用户身份运行所有内容?
  • 好的,谢谢你的回复。我对 uwsgi.sock 的套接字权限是 777,所有者是 nginx:nginx nginx 服务器以 root 身份启动:“sudo systemctl start nginx”否则它不会启动,而 uwsgi 以用户“elastic”运行,即我的用户登录但在ini文件中我有uid = nginx gid = nginx ....有什么帮助吗?顺便说一句,我添加了 nginx
  • 顺便说一句,我也有:sudo usermod -a -G elastic nginx chmod 710 /home/elastic
  • 我没有任何权限被拒绝,但我仍然有 111:在我启动 nginx 时连接被拒绝。这个错误来自哪里?

标签: django nginx uwsgi


【解决方案1】:

docs(我猜你在关注它)建议你的 uwsgi ini 文件中的socket 配置选项应该采用套接字的路径,而不是 URL。你可以尝试改变吗:

[uwsgi]
...
socket = unix:///socket/uwsgi.sock

[uwsgi]
...
socket = /socket/uwsgi.sock

【讨论】:

  • 如果我进行了更改,我在运行 uwsgi 时再次收到错误:删除 unix 套接字时出错,unlink(): Permission denied [core/socket.c line 198] bind(): Address already in use [核心/socket.c 第 230 行]
【解决方案2】:

解决方案是将 uwsgi.ini 文件中的 socket = unix:///socket/uwsgi.sock 更改为 socket = /socket/uwsgi.sock。我不知道为什么在某些文档中会出现用于转义的双斜线。

【讨论】: