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

我不能用我的ini文件在emperror模式下运行uwsgi。 我用sudo pip install 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。 首先我试图关注djangonginx文档 ,但是当它不起作用时,我search了很多东西。 这是我的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 

这是我的ebook_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时,我获得了权限的拒绝:

 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 

为什么我的权限被拒绝?
//编辑:我错过了一些configuration设置。 所以这里是我的新的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数据,但它是作为我的用户创build的,nginx无法读取它。

我读过你的文章,你会得到权限问题,因为www-data可能没有文件夹uwsgi的写权限,你有两种测试方法:

  1. 使用www-data用户登录并尝试在/var/uwsgi/
    • 使用www-data用户su - www-data登录
  2. 将文件夹权限更改为775chmod 775 /var/uwsgi/

另一个选项可以尝试将套接字的路径更改为tmp文件夹。 我使用tmp文件夹在VM中尝试了您的配置,并且完美地工作

ebook_uwsgi.ini

 socket = /tmp/ebook.sock 

ebook_nginx.conf

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

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

我也面临同样的。

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

以上两个文件缺少pip install uwsgi

apt-get install uwsgi在两个以上的文件apt-get install uwsgi添加并解决问题