簡體   English   中英

Nginx / Django:訪問靜態文件將導致403禁止訪問

[英]Nginx / Django: Accessing static files results in 403 Forbidden

我已經嘗試調試了好幾個小時,但不確定要檢查什么。 我的問題是Nginx不提供Django靜態文件。 訪問靜態文件將導致錯誤403 Forbidden

來自nginx錯誤日志的確切錯誤是:

2013/02/11 05:42:13 [error] 22526#0: *29 open() "/home/mydomain/public_html/test2/src/bootstrap.css" failed (13: Permission denied), client: XXX.XXX.XX.XX, server: mydomain.com, request: "GET /src/bootstrap.css HTTP/1.1", host: "www.mydomain.com"

這是我的nginx配置文件

server {
    listen   XX.XX.X.XXX:80;
    server_name mydomain.com;
    root /home/mydomain/public_html/test2/app;
    # serve directly - analogous for static/staticfiles
    location /media/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location /admin/media/ {
        # this changes depending on your python version
        root /home/mydomain/public_html/test2/lib/python2.7/site-packages/django/contrib;
    } 
    location /src/ { 
        autoindex    on;   
        root /home/mydomain/public_html/test2;
    }     
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off; 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    }
    # what to serve if upstream is not available or crashes
    error_page 500 502 503 504 /media/50x.html;
}

靜態文件存儲在/home/mydomain/public_html/test2/src

我試過chown mydomain.mydomain -R *chmod 755 /home/mydomain -R *沒有任何作用。

用這個

順便說一句。 IfIsEvil

server {
    listen 80;
    server_name mydomain.com;

    #access_log /var/log/nginx/x_access.log;
    #error_log /var/log/nginx/x_error.log;

    location /static {
        alias /path/to/your/static;
    }

    location /media {
        alias /path/to/your/media;
    }

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off; 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    }
}

這是我最初的問題的可行解決方案

server {
    listen   XX.XX.X.XXX:80;
    server_name mydomain.com;
    root /home/mydomain/public_html/test2/app;

    location /admin/media/ {
        # this changes depending on your python version
        root /home/mydomain/public_html/test2/lib/python2.7/site-packages/django/contrib;
    }
    location /src {
        root /home/mydomain/public_html/test2;
    }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    } 
    # what to serve if upstream is not available or crashes
    error_page 500 502 503 504 /media/50x.html;
}

另一種方法是使用try_files。 這樣做的好處是Nginx將首先尋找要提供的真實文件,如果找不到,它將執行傳遞給django應用。 例如,這對於提供動態sitemap.xml是完美的,因為您無需在nginx.conf中對文件進行特殊大小寫。

# Set default expires headers (used for static assets)
expires 30d;

server {
  listen 80;
  server_name mydomain.com;

  root /some/path/assets/;
  try_files $uri @django;

  location @django {
    expires -1d;
    proxy_set_header  Host $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect    off;
    proxy_pass        http://unix:/some/path/server.sock;
  }

  location /static/admin/ {
    alias /some/path/lib/python2.7/site-packages/django/contrib/admin/static/admin/;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM