Ubuntu上的nginx权限被拒绝

Posted

技术标签:

【中文标题】Ubuntu上的nginx权限被拒绝【英文标题】:nginx Permission denied on Ubuntu 【发布时间】:2018-07-15 11:12:02 【问题描述】:

我正在尝试通过关注this guide 来使用 uWSGI 和 nginx 设置我的 Django 应用程序。我可以使用 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 here、another here 和 yet another one,这不是全部),更改了我的权限,甚至将我的 .sock 移动到另一个文件夹(其中一个 SO答案建议)。

我还能尝试什么?


更新:

我在评论中提到了它,但我已经了解了 bit。问题的一部分显然是,我的 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

【问题讨论】:

当您尝试访问静态文件或媒体文件时,它们应该直接通过 nginx 提供服务,因此您不必调用您的套接字。 location /media 好像不行,能分享一下你打电话的网址吗? @Thom:IP 和端口都在nginx.conf129.214.113.1098000)中指定,我的 Django-app 被称为“grader”。所以我尝试访问的 URL 是129.214.113.109:8000/grader 好的,那么您应该尝试通过location /grader/static ...location /grader/media ... 更改您的location 语句 没有变化。我认为 nginx finding 文件没有任何问题,只是它无法访问 it/them。 【参考方案1】:

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

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

【讨论】:

嗯...奇怪...我尝试将所有者和组(以及仅组)都更改为www-data(我是其中的一员),但@987654324都没有@ 也不是 chgrp 有效?!我得到不允许操作。我也尝试重新启动,因为我在某处读到 Linux 组在您注销并再次登录后才会生效。但是,唉…… 求助。我正在使用的虚拟机显然使用了 NFS /home,这与权限混淆了。但是我在本地文件夹中重新设置了整个东西,将所有者更改为me:www-data,并将权限设置为 777 以取得良好的效果。 Buuuut 没有变化。【参考方案2】:

正如教程所说:

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

试试看会发生什么。

同样,我不建议您使用 sudo 或以 root 身份进行操作,以普通用户身份进行操作并在必要时设置权限,否则您最终可能会遇到 Nginx 或 uWSGI 需要做某事的情况与文件,它们归根用户所有。

【讨论】:

而且我想我已经尝试了大多数有和没有sudo的东西。

以上是关于Ubuntu上的nginx权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

text Ubuntu 18.04上的KVM权限被拒绝错误

Nginx:stat()失败(13:权限被拒绝)

运行python app时,MySql Access被拒绝[Ubuntu 1604 / NGINX / uWSGI]

用户 ubuntu 的权限被拒绝,但 .csv 文件上的用户 www-data 却没有

nginx 错误:(13:权限被拒绝)同时连接到上游)

用winscp访问Ubuntu互传文件被拒???跪求大神