无法在emperor模式下使用ini文件运行uwsgi - 权限被拒绝

时间:2015-04-14 15:16:38

标签: django nginx uwsgi

我无法使用我的ini文件在emperror模式下运行uwsgi。我用sudo pip install uwsgi安装了uwsgi 当我尝试启动uwsgi时,我收到错误:

sudo /etc/init.d/uwsgi start
/etc/init.d/uwsgi: line 72: /usr/share/uwsgi/init/snippets: No such file or directory
/etc/init.d/uwsgi: line 73: /usr/share/uwsgi/init/do_command: No such file or directory
[....] Starting app server(s): uwsgi/etc/init.d/uwsgi: line 80: do_command: command not found
 failed!

我正在使用Debian。首先我尝试跟随django and nginx docs,但是当它不起作用时我搜索了很多。 这是我的ebook_uwsgi.ini文件:

# ebook_uwsgi.ini file
[uwsgi]
emperor = /etc/uwsgi/vassals
#plugins        = python #if uwsgi installed with pip, dont have to use this line
# Django-related settings
# the base directory (full path)
chdir           = /var/www/django/ebook/ebook/wsgi/ebook/
# Django's wsgi file
module          = controller.wsgi:application
# the virtualenv (full path)
home            = /var/www/django/ebook

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10

# the socket (use the full path to be safe
socket         = /var/uwsgi/ebook.sock
# ... with appropriate permissions - may be needed
chmod-socket    = 664
uid             = www-data
gid             = www-data
# clear environment on exit
vacuum          = true


no-site         = True
wsgi-file       = /var/www/django/ebook/ebook/wsgi/ebook/controller/wsgi.py
env             = DJANGO_SETTINGS_MODULE=controller.settings # set an environment variable

这是我的电子书_nginx.conf:

# mysite_nginx.conf

# the upstream component nginx needs to connect to
upstream django {
    server unix:///var/uwsgi/ebook.sock; # for a file socket
    #server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      8001;
    # the domain name it will serve for
    server_name IP #.bookdownloading.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /var/www/django/ebook/ebook/data;  # your Django project's media files - amend as required
    }

    location /static {
        alias /var/www/django/ebook/ebook/wsgi/static/; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        include     /var/www/django/ebook/ebook/uwsgi_params; # the uwsgi_params file you installed
    }
}

IP代表服务器真实IP。 当我用我的ini文件启动uwgi时,我得到Permission denied:

uwsgi --ini ebook_uwsgi.ini 
[uWSGI] getting INI configuration from ebook_uwsgi.ini
*** Starting uWSGI 2.0.10 (64bit) on [Tue Apr 14 17:11:32 2015] ***
compiled with version: 4.7.2 on 14 April 2015 16:47:40
os: Linux-2.6.32-042stab104.1 #1 SMP Thu Jan 29 12:58:41 MSK 2015
nodename: zoltan
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 8
current working directory: /var/www/django/ebook/ebook
detected binary path: /usr/local/bin/uwsgi
chdir() to /var/www/django/ebook/ebook/wsgi/ebook/
your processes number limit is 2062113
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)
*** starting uWSGI Emperor ***
bind(): Permission denied [core/socket.c line 230]

我在/var/uwsgi/ebook.sock中使用socked,我已将www-data设置为uwsgi目录的所有者:

ls -la /var
total 128
drwxr-xr-x 13 root     root     15 apr 14 16:29 .
drwxr-xr-x 23 root     root     23 apr 12 19:46 ..
drwxr-xr-x  2 root     root     19 apr 13 06:25 backups
...
drwxr-xr-x  2 www-data www-data  2 apr 14 16:36 uwsgi

为什么我会拒绝许可?
//编辑:  我错过了一些配置设置。所以这是我的新ini文件:

# ebook_uwsgi.ini file
[uwsgi]
#emperor = /etc/uwsgi/vassals
#plugins        = python #if uwsgi installed with pip, dont have to use this line
# Django-related settings
# the base directory (full path)
chdir           = /var/www/django/ebook/ebook/wsgi/ebook/
# Django's wsgi file
module          = controller.wsgi:application
# the virtualenv (full path)
home            = /var/www/django/ebook

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 1

# the socket (use the full path to be safe
socket         = /var/uwsgi/ebook.sock
# ... with appropriate permissions - may be needed
chmod-socket    = 664
uid             = www-data
gid             = www-data
# clear environment on exit
vacuum          = true


no-site         = True
wsgi-file       = /var/www/django/ebook/ebook/wsgi/ebook/controller/wsgi.py
#env             = DJANGO_SETTINGS_MODULE=controller.settings # set an environment variable

和nginx设置:

# mysite_nginx.conf

# the upstream component nginx needs to connect to
upstream ebook {
    server unix:///var/uwsgi/ebook.sock; # for a file socket
    #server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      8001 default_server;
    # the domain name it will serve for
    server_name IP; #.bookdownloading.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /var/www/django/ebook/ebook/data;  # your Django project's media files - amend as required
    }

    location /static {
        alias /var/www/django/ebook/ebook/wsgi/static/; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass      ebook;
        include         /var/www/django/ebook/ebook/uwsgi_params; # the uwsgi_params file you installed
    }
}

无论我是否运行uwsgi,我都会502 Bad Gateway。错误nginx日志:

2015/05/12 16:22:08 [crit] 3002#0: *1 connect() to unix:///var/uwsgi/ebook.sock failed (13: Permission denied) while connecting to upstream, client: 78.45.37.119, server: IP, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///var/uwsgi/ebook.sock:", host: "IP:8001"

嗯,即使我已将stocket文件的所有者设置为www-data,它也是作为我的用户创建的,而nginx无法读取它。

3 个答案:

答案 0 :(得分:5)

我已阅读您的帖子并且您收到了权限问题,因为www-data可能没有对文件夹 uwsgi 的写入权限,您有两种方法可以测试它:

  1. 使用 www-data 用户登录并尝试在/var/uwsgi/内创建文件
    • 使用 www-data 用户 su - www-data
    • 登录
  2. 将文件夹权限更改为 775 chmod 775 /var/uwsgi/
  3. 另一种选择可能是尝试将套接字的路径更改为 tmp 文件夹。我在使用tmp文件夹的虚拟机中尝试了您的配置,它运行良好

    <强> ebook_uwsgi.ini

    socket = /tmp/ebook.sock
    

    <强> ebook_nginx.conf

    upstream django {
        server unix:///tmp/ebook.sock;
    }
    

答案 1 :(得分:0)

不知何故,当我从我的linux用户运行uwsgi时,uwsgi忽略了我的ini文件并使用我的用户的所有者和组创建了ebook.sock,而不是指定的www-data。当我手动将所有者和组更改为www-data时,Web已加载 问题在于文件uwsgi_params的权限。使用nginx文件后,它可以正常工作。

答案 2 :(得分:0)

我也面临同样的情况。

/usr/share/uwsgi/init/snippets/usr/share/uwsgi/init/do_commands

pip install uwsgi

缺少上述两个文件

但是apt-get install uwsgi会在上面添加两个文件并解决问题