nginx在Ubuntu上被拒绝

时间:2018-02-05 14:54:03

标签: django ubuntu nginx permissions uwsgi

我正在尝试按照this guide设置我的Django应用程序,使用uWSGI和nginx。我可以使用Django的开发服务器运行我的应用程序,也可以直接从uWSGI运行。

我正在大学管理的Ubuntu 16.04虚拟机上运行所有内容,而我的用户有sudo个访问权限。

我的问题:
到达教程的this bit并尝试获取图像时,我从nginx收到403错误。
next section会产生502。

/var/log/nginx/error.log显示

  连接到上游时

connect()到unix:///me/myproject/media/image.jpg失败(13:权限被拒绝)

     连接到上游时

connect()到unix:///me/myproject/project.sock失败(13:权限被拒绝)

分别为403和502。

我已阅读多个问题和指南(one hereanother hereyet another one,而且并非所有问题和指南,更改了我的权限,甚至移动了.sock到另一个文件夹(推荐的一个SO答案)。

我还能尝试什么?

更新

我在评论中提到过它,但我进一步得到了。问题的一部分是,显然,我的VM上的/home目录是NFS,这会弄乱许多权限。

我做了什么:

  • 我在/var/www/myproject/
  • 中设置了我的项目
  • 运行chown -R me:www-data myproject
  • 运行chmod -R 764 myproject

我的新结果:

  • 没有运行nginx:
    • uwsgi --http :8000 --module myproject.wsgi
      完美运作
  • 运行nginx:
    • uwsgi --socket myproject.sock --module myproject.wsgi --chmod-socket=664
      给了我一个502
    • uwsgi --ini myproject.ini
      给了我一个502

所以现在它不是一般的许可问题,这肯定是nginx的一个问题......

更新#2:
目前,当other对套接字具有read-write权限并且对项目的其余部分具有read-execute权限时,一切正常。 所以nginx不被认可,因为它应该......我已经仔细检查了,nginx作为www-data用户运行,该用户是我整个项目的组所有者,并且read-execute权限,就像other现在一样。

这是我的(已更新)nginx.conf

# myproject_nginx.conf

# the upstream component nginx needs to connect to
upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    server unix:///var/www/myproject/myproject.sock;
    # 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      8000;
    # the domain name it will serve for
    server_name my.ip.goes.here; # 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/myproject/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /var/www/myproject/static; # your Django project's static files - amend as required

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

这是我的(已更新)uwsgi.ini

# myproject_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir          = /var/www/myproject
# Django's wsgi file
module         = myproject.wsgi
# the virtualenv (full path)
home           = /var/www/myenv

# process-related settings
master         = true
# maximum number of worker processes
processes      = 10
# the socket (full path)
socket         = /var/www/myproject/myproject.sock
# ... with appropriate permissions - may be needed
chmod-socket   = 666
uid            = me
gid            = www-data
# clear environment on exit
vacuum         = true

2 个答案:

答案 0 :(得分:0)

根据我的经验,Web服务器的大部分权限问题都是访问root拥有的文件,但Apache(nginx)在www-data用户下运行。

尝试运行sudo chown www-data -R /path/to/your/data/folder

答案 1 :(得分:0)

正如教程所说:

  

您可能还需要将您的用户添加到nginx的组(可能是   www-data),反之亦然,这样nginx就可以读写你的   插座正确。

试试看看会发生什么。

我也不建议您使用sudo或root用户,以普通用户身份执行操作并在必要时放置权限,否则您可能会遇到Nginx或uWSGI需要执行某些操作的情况使用文件,它们归root所有。