web-dev-qa-db-ja.com

静的ファイルのフェッチがnginxで404で失敗しました

Djangoアプリをnginxとgunicornでubuntu 12にデプロイしています。

そして、私はnginx仮想ホストファイルを以下のように設定します:

server {
    listen 80;
    server_name mydomain.com;
    access_log  /var/log/nginx/gunicorn.log;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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 /static/ {
        root /var/www/Django/ecerp/erp/static/;
    }

}

Djangoもリクエストできますが、静的ファイルをリクエストすると、404ステータスで応答します。

静的ファイルのルートパスが正しいと確信しています。

誰か助けてもらえますか?

24
Alfred Huang

aliasの代わりにrootを使用する必要があります。 rootは、末尾のURL部分をローカルパスに追加します(例: http://test.ndd/trailing/part 、これにより/ trailing/partがローカルパスに追加されます)。その代わりに、aliasはまさにあなたが望むことをします: http://test.ndd/static/ が要求されたとき、/ staticはstaticを再度追加することなく正確にエイリアスにマップされます。

39

TL; DR-ファイルの権限を確認する必要があります

この質問に出くわし、私はすでにrootの代わりにaliasを使用していたので、既存の回答はまあまあでしたが、以下は他の人に役立つかもしれません。

私の場合、同じ症状の解決策は、rootを所有者として持つstatic/のファイルであることがわかりました。

単純なchown www-data:www-data .で問題が解決し、もう404で解決できません。

8
Jivan