2

これを数時間デバッグしようとしましたが、他に何を確認すればよいかわかりません。私の問題は、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 *ません。

4

3 に答える 3

2

これが私の最初の問題に対する実用的な解決策です:

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;
}
于 2013-02-11T12:41:16.067 に答える
2

これを使って

ところで。イフ・イズ・イービル

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/;
    }
}
于 2013-02-11T12:22:19.140 に答える
0

これを行う別の方法は、try_files を使用することです。これの利点は、Nginx が最初に提供する実際のファイルを探し、見つからない場合は実行を django アプリに渡すことです。これは、nginx.conf でファイルを特殊なケースにする必要がないため、たとえば動的な sitemap.xml を提供するのに最適です。

# 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/;
  }
}
于 2013-02-11T14:49:30.920 に答える