django - Nginx - 仅在静态文件上出现 403 错误
问题描述
堆栈是:Ubuntu // Supervisor // 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
如果有人可以解释这个逻辑 - 为什么根文件夹必须具有执行权限 - 我会非常感激(并且赞成)
推荐阅读
- amazon-web-services - 如何从选择状态阶跃函数过渡?
- angular - 如何在 Angular 中测试 http 请求参数?
- ios - 图像仅在谷歌地图 SWIFT iOS 上的自定义 markerInfoWindow 中第一次不呈现
- laravel - Laravel 软删除:model::onlyTrashed() 返回所有
- java - ArrayList 添加 null 而不是 String
- c - OpenMP 错误:控制谓词无效
- php - 祖父母、父母、子女等的案件总和
- javascript - 修改箭头函数javascript
- python - django项目中excel模板文件放在哪里
- python - 在 groupby 之后为类别添加一列