uWSGI 配置错误 'core/socket.c' - w/ Django & NGINX

Posted

技术标签:

【中文标题】uWSGI 配置错误 \'core/socket.c\' - w/ Django & NGINX【英文标题】:uWSGI config error 'core/socket.c' - w/ Django & NGINXuWSGI 配置错误 'core/socket.c' - w/ Django & NGINX 【发布时间】:2016-11-10 13:57:42 【问题描述】:

我正在使用 nginx 和 uWSGI 在 Ubuntu 14.04 (Digital Ocean Droplet) 上建立一个 Django 站点(在此之后 tutorial 没有制作第二个项目)。我可以使用 manage.py 运行我的 Django 站点。我也可以毫无问题地运行uwsgi --http :8080 --home /home/andrew/Env/personalsitevenv --chdir /home/andrew/andrew-django-personal-site/personalsite -w personalsite.wsgi。我可以看到我的网站在我的 IP:Port 上运行。我也可以毫无问题地运行uwsgi --http :8000 --module personalsite.wsgi --virtualenv /home/andrew/Env/personalsitevenv

当我访问服务器的 IP 时,我看到的只是 Welcome to nginx! 页面。没有任何 NGINX 日志错误 & sudo service nginx configtest 是干净的。我得到的唯一信息是在我为 uWSGI 设置的日志文件中,其中包含:

*** Starting uWSGI 2.0.12 (64bit) on [Fri Jul  8 00:41:22 2016] ***
compiled with version: 4.8.4 on 05 July 2016 17:45:39
os: Linux-4.4.0-28-generic #47~14.04.1-Ubuntu SMP Fri Jun 24 16:30:35 UTC 2016
nodename: **********
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /etc/uwsgi/sites
detected binary path: /usr/local/bin/uwsgi
chdir() to /home/andrew/andrew-django-personal-site/personalsite
your processes number limit is 1832
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
bind(): No such file or directory [core/socket.c line 230]

任何人都可以在这里发现任何配置问题或其他任何可能有问题的地方吗?


/etc/uwsgi/sites/personalsite.ini

[uwsgi]
logto = /var/log/uwsgi/log.txt

project = personalsite
base = /home/andrew
repo = andrew-django-personal-site

chdir = %(base)/%(repo)/%(project)
home = %(base)/Env/personalsitevenv
module = %(project).wsgi:application

master = true
processes = 5

socket = $(base)/%(repo)/%(project)/%(project).sock
chmod-socket = 664
chown-socket = www-data
vacuum = true

/etc/init/uwsgi.conf

description "uWSGI application server in Emperor mode"

start on runlevel [2345]
stop on runlevel [!2345]

setuid andrew
setgid www-data

exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/sites

/etc/nginx/sites-available/personalsite

server 
    listen 80;

    location = /favicon.ico  access_log off; log_not_found off; 
    location /static/ 
        root /home/andrew/andrew-django-personal-site/personalsite;
    

    location / 
        include         uwsgi_params;
        uwsgi_pass      unix:/home/andrew/andrew-django-personal-site/personalsite/personalsite.sock;
    

【问题讨论】:

您的 include uwsgi_params; 必须是绝对路径,例如 /home/andrew/conf/uwsgi_params 或任何其他可识别的位置 【参考方案1】:

personalsite.ini 文件似乎包含作为模式的套接字路径,该模式可能有 0 个或多个匹配项,可能与实际路径不匹配,因此将其更新为绝对路径将解决问题。

在您的个人站点.ini 中: 如果你替换

socket = $(base)/%(repo)/%(project)/%(project).sock

你的套接字位置的绝对路径

socket = /home/andrew/andrew-django-personal-site/personalsite/personalsite.sock

这将解决问题。

一旦你知道了套接字的位置,你就可以设计一个与之匹配的模式。

nginx 配置中的示例位置:

    location / 
         uwsgi_pass unix:/home/andrew/andrew-django-personal-site/personalsite/personalsite.sock;
         include /your_location/conf/uwsgi_params; // or your own
         uwsgi_modifier1 30;          // ignore extra if not used
         proxy_set_header HTTP_AUTHORIZATION $http_authorization; // only use if needed
         proxy_set_header  X-Real-IP  $remote_addr; // only use if needed
         proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;// only if needed
         proxy_set_header  Host $http_host; // only use if needed
         proxy_redirect  off;  // only use if needed
    

【讨论】:

您好,您对include uwsgi_params、我使用的教程、其他tutorial 以及我见过的所有其他人都说include uwsgi_params 适合简单的设置。我已经使用它建立了另一个站点。我没有特殊的 uwsgi 参数配置,所以它使用默认值 /etc/nginx/uwsgi_params 所有这些其他配置变量对于更高级的设置来说似乎都是额外的。您能否在 uwsgi 日志文件中指出其中一个会导致我的错误? 您在 personalsite.ini 中指定的套接字位置似乎不存在,因此必须像 socket = /var/run/uwsgi/mysocket.sock 那样明确指定或验证根据格式在那里。 我更改了/etc/uwsgi/sites/personalsite.ini 线socket = /var/run/uwsgi/personalsite.sock/etc/nginx/sites-available/personalsite 线uwsgi_pass unix:/var/run/uwsgi/personalsite.sock; 从而消除了错误。我不明白为什么我之前的套接字定义不正确 - 你能解释一下原因吗? 如果您使用 cmets 的此解决方案更新您的答案,我会接受,谢谢您的帮助。

以上是关于uWSGI 配置错误 'core/socket.c' - w/ Django & NGINX的主要内容,如果未能解决你的问题,请参考以下文章

在配置nginx和uwsgi时,出现 "没有这样的文件或目录 "的错误。

uwsgi IOError:写入错误

uwsgi总是绑定到80端口。即使配置不

uwsgi flask 在python3环境下配置

Django uWSGI NGINX 错误请求 400

nginx中的uwsgi .ini param等价物(烧瓶app上有500个错误)