V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fanfe
V2EX  ›  问与答

[求助]nginx 托管 django 的静态文件,总是 403,按照其它的教程来修改配置、权限,自己也尝试了好多次,问题还是依旧,看看这边有没有能够提供解决思路的朋友,谢了

  •  
  •   fanfe · 2017-09-13 17:14:30 +08:00 · 4053 次点击
    这是一个创建于 2409 天前的主题,其中的信息可能已经有所发展或是发生改变。
    关于这个问题我在 stackoverflow 问了,但是得到的回复并不能解决问题
    https://stackoverflow.com/questions/46169081/nginx-serving-django-static-and-media-files-403-forbidden

    下面我描述一下配置和 log,希望能够得到解答,谢谢啦。

    nginx.conf 配置:
    #user www-data;
    user me;
    worker_processes 4;
    pid /run/nginx.pid;
    ....

    站点对应的 nginx 配置:
    server {
    add_header Access-Control-Allow-Origin *.mysite.com;
    add_header Access-Control-Allow-Headers X-Requested-With;
    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    listen 80;
    server_name mysite.com;
    access_log /var/log/nginx/hitek.access.log;
    error_log /var/log/nginx/hitek.error.log;

    location / {
    proxy_pass http://127.0.0.1:8010;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location ~ ^/media/ {
    #alias /var/www/html/mysite/media/;
    alias /home/me/website/mysite/media/;
    #alias /home/www-data/website/website/mysite/media/;
    expires 1h;
    access_log off;
    }

    location ~ ^/static/ {
    #alias /var/www/html/mysite/collected_static/;
    alias /home/me/website/mysite/collected_static/;
    #alias /home/www-data/website/website/mysite/collected_static/;
    expires 1h;
    access_log off;
    include /etc/nginx/mime.types;
    }
    }

    ls -alt 查看文件夹及权限,
    drwxrw-rw- 8 me me 4096 Sep 11 14:43 mysite
    drwxr-xr-x 6 me me 4096 Sep 8 14:30 ..
    drwxrw-rw- 4 me me 4096 Sep 7 11:41 .

    各层目录除了 /home 为 root 用户外,后续路径用户均为 me

    error log 大致表现为以下:
    ...
    directory index of "/home/me/website/mysite/collected_static/" is forbidden
    ...
    24 条回复    2017-09-14 14:00:19 +08:00
    zhuyao
        1
    zhuyao  
       2017-09-13 17:26:36 +08:00
    要不给 nginx 赋予 root 的权限试一试
    fanfe
        2
    fanfe  
    OP
       2017-09-13 17:29:46 +08:00
    @zhuyao 这个我试过了,同时也给了 chown -R root :root /home && chmod -R 777 或 766 home 但就是不行,不知道我又没有什么其它疏漏,反正就不行,我就觉得好奇怪。
    eecjimmy
        3
    eecjimmy  
       2017-09-13 18:10:51 +08:00 via iPhone   ❤️ 1
    autoindex on;//自动显示目录
    millson
        4
    millson  
       2017-09-13 19:11:35 +08:00 via iPhone
    selinux ?
    jackysc
        5
    jackysc  
       2017-09-13 19:20:59 +08:00
    系统呢? CentOS 好像还需要关闭 SELINUX
    akira
        6
    akira  
       2017-09-13 19:21:03 +08:00
    试试在那 media 和 collected_static 两个 目录下创建个空白的 index.html , 然后配置默认 index 为 index.html,看看什么情况.
    zhuyao
        7
    zhuyao  
       2017-09-13 20:03:54 +08:00
    @fanfe 你的 nginx 里面的配置怪怪的,server{
    root:xxxxxxx
    } 为啥没有
    fanfe
        8
    fanfe  
    OP
       2017-09-13 20:42:28 +08:00 via Android
    @eecjimmy 这个要试一下
    fanfe
        9
    fanfe  
    OP
       2017-09-13 20:47:52 +08:00 via Android
    @millson @jackysc debian 没有这个问题吧
    fanfe
        10
    fanfe  
    OP
       2017-09-13 20:49:28 +08:00 via Android
    @akira 这个没试过,看到这感觉应该是 php 那类才用到吧
    fanfe
        11
    fanfe  
    OP
       2017-09-13 20:50:25 +08:00 via Android
    @zhuyao 我试过了 这样会导致路径错误变成 404
    ipwx
        12
    ipwx  
       2017-09-13 20:52:40 +08:00   ❤️ 1
    mysite 的权限不对。不能 rwxrw-rw-,要 rwxr-xr-x
    ipwx
        13
    ipwx  
       2017-09-13 20:53:25 +08:00   ❤️ 1
    要让一个目录下面的文件能读取,它得有 x 权限。有没有 w 无所谓。
    ipwx
        14
    ipwx  
       2017-09-13 20:54:14 +08:00
    然后 debian 下面的 nginx 运行账号是 www-data,而不是你 me。它没有读取权限,所以显示不了。
    isbase
        15
    isbase  
       2017-09-14 00:44:27 +08:00 via Android
    需要有读和执行的权限 755
    Ge4Los
        16
    Ge4Los  
       2017-09-14 00:54:57 +08:00
    mysite 这个目录要有 x 的权限。 这样才能读目录下面的文件。
    fanfe
        17
    fanfe  
    OP
       2017-09-14 08:20:09 +08:00
    @akira @eecjimmy 按照你们的来设置,结果 index.html 被重复重定向了,变成这样 ...b77eae605b92a47.png/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/
    fanfe
        18
    fanfe  
    OP
       2017-09-14 08:21:10 +08:00
    @ipwx @isbase @Ge4Los 递归修改了还是不行,运行用户也改成默认的了。
    hzlez
        19
    hzlez  
       2017-09-14 09:16:30 +08:00
    我用的 fedora, 过去我遇到过这样的问题的时候,就是因为 selinux.
    我的解决办法是: `chcon -Rt httpd_sys_content_t /path/to/www`
    具体检查操作可以参考一下下面的链接。
    [参考链接: https://stackoverflow.com/questions/22586166/why-does-nginx-return-a-403-even-though-all-permissions-are-set-properly#answer-26228135]
    fanfe
        20
    fanfe  
    OP
       2017-09-14 10:02:19 +08:00
    @hzlez debian 默认压根没装,也操作不下去。
    ipwx
        21
    ipwx  
       2017-09-14 10:05:55 +08:00
    @fanfe /home 和 /home/me 也必须 r-x。
    fanfe
        22
    fanfe  
    OP
       2017-09-14 13:43:54 +08:00
    @ipwx
    / => drwxr-xr-x 4 root root 4096 Sep 12 09:33 home
    /home => drwxr-xr-x 6 me me 4096 Sep 8 14:30 me
    /home/me => drwxr-xr-x 4 me me 4096 Sep 7 11:41 website
    后面的权限也是相同的。
    ipwx
        23
    ipwx  
       2017-09-14 13:47:56 +08:00
    如果你不用 location ~ ^/static/ 而是用 location /static/ 呢?当然这是玄学。
    fanfe
        24
    fanfe  
    OP
       2017-09-14 14:00:19 +08:00
    @ipwx 还真的就可以了=__=,还发现可能之前就解决但是因为浏览器缓存在作怪导致一直重复载入显示错误的页面。在此感谢以上各位。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3152 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:18 · PVG 22:18 · LAX 07:18 · JFK 10:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.