Nginx - 仅在静态文件上出现403错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx - 仅在静态文件上出现403错误相关的知识,希望对你有一定的参考价值。

堆栈是:Ubuntu //主管// nginx < - > Gunicorn < - > Django 1.11

静态文件夹:/home/sitebiz/sitebiz/static/

Nginx配置:/etc/nginx/sites-enabled/site.biz

server {
        listen   80;
        listen   [::]:80;
        access_log off;
        server_name site.biz;
        return 301 https://$server_name$request_uri;
}


server {
    listen              443 ssl;
    #listen              80 ssl;
    server_name         site.biz;
    ssl_certificate     /etc/letsencrypt/live/site.biz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/site.biz/privkey.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    #listen 80;

    gzip on;
    access_log /var/log/nginx-access.log;
    error_log /var/log/nginx-error.log;


    location /static {
        root  /home/sitebiz/sitebiz;
        internal;
    }

    location /track {
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code;
        proxy_set_header GEOIP_COUNTRY_NAME $geoip_country_name;
        proxy_redirect off;

        if (!-f $request_filename) {
            proxy_pass http://127.0.0.1:8899;
            break;
        }
    }

    location /income {
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code;
        proxy_set_header GEOIP_COUNTRY_NAME $geoip_country_name;
        proxy_redirect off;

        if (!-f $request_filename) {
            proxy_pass http://127.0.0.1:8899;
            break;
        }
    }


    location / {
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code;
        proxy_set_header GEOIP_COUNTRY_NAME $geoip_country_name;
        proxy_redirect off;

        if (!-f $request_filename) {
            proxy_pass http://127.0.0.1:8000;
            break;
        }
    }
}        

我试图将/home/sitebiz/sitebiz/static/目录及其所有内容所有权更改为sitebiz用户和www-data,但没有帮助。 Django本身甚至不能提供静态文件,我也不知道为什么。

从django设置:

SITE_ROOT = os.path.abspath(os.path.dirname(name)) 
MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(SITE_ROOT, 'static') 

先感谢您。

答案

我不知道,为什么,但POST的解决方案工作正常

只需在shell中执行:

sudo chmod o+x /root

如果有人可以解释这个逻辑 - 为什么根文件夹必须具有执行权限 - 我会非常感激(和振奋)

以上是关于Nginx - 仅在静态文件上出现403错误的主要内容,如果未能解决你的问题,请参考以下文章

仅在 https 上出现禁止的 403 错误,但 url http 工作正常

关于nginx访问 静态文件 403 的错误

Angular http post 仅在 Chrome 中在服务器上返回 403 错误

nginx迁移到阿里云后静态文件403错误无法访问的原因都有哪些

Nginx 在静态文件上抛出 403 Forbidden

Nginx 为 CSS/JS 文件提供 403 错误