Nginx

Nginx Access Resource Permission Problem error: 403 Forbidden ( Permission denied)

简介:使用Nginx 访问资源文件报错:403 Forbidden,查看nginx的error.log显示Permission denied

问题描述

我在Mac的虚拟机Ubuntu上,使用Nginx+Django+Gunicorn 搭建了一个网站,今天遇到遇到一个问题:在请求Django项目的media下的文件时,浏览器返回403 Forbidden,无法获取media下的资源文件。

问题排查

  • 查看nginx的error日志
    这是我的django项目配置的nginx日志
    cat /var/log/nginx/videohub_error.log
    

日志中有这么一条记录与我请求资源文件有关:

2019/07/02 10:56:45 [error] 3822#3822: *16 open() "/var/www/video-hub/media/media_items1c62837a4c4e0ac8c4497fdd4f5836c8.mp4" failed (13: Permission denied), client: 10.211.55.2, server: 127.0.0.1,, request: "GET /media/media_items1c62837a4c4e0ac8c4497fdd4f5836c8.mp4 HTTP/1.1", host: "10.211.55.3", referrer: "http://10.211.55.3/videos/"

该问题抛出的结果为,没有nginx没有权限访问该文件。

另外通过查看该文件的权限为root,如下图所示:
Snip20190703_1.png
通过api接口上传的文件权限在root组了,而通过admin中上传的文件在www_data组,太奇怪了,还没找到原因,目前先按照下面的方法修改nginx权限吧。

  • 查看nginx的启动用户
    ps aux | grep "nginx: worker process" | awk '{print $1}'
    

    输出结果:
    www-data
    www-data
    paralle+
    

    原来我的nginx是使用www-data启动的,而非用root启动的。

nginx.config中的user改为和启动用户一致。

sudo vim /etc/nginx/nginx.conf

修改user 为 root,然后保存。

  • 重启nginx服务
    sudo service nginx reload
    

推荐阅读

目录