web-dev-qa-db-ja.com

DjangoおよびNginxを使用して静的ファイルの404を解決する方法は?

Trusty VMをDjango + Nginxでセットアップしました( (その他のもの も)。

サーバーは動作しています。 "Djangoへようこそ" ページが表示されます。しかし、servername/adminに入ると HTMLページをロードします ですが、静的コンテンツをロードできません。

管理ページ 静的コンテンツへのリンクがあります:

<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="/static/admin/css/login.css" />

Nginxログが示すように、CSSファイルは両方とも404を返します。

192.168.56.1 - - [05/Jun/2014:12:04:09 -0300] "GET /admin HTTP/1.1" 301 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
192.168.56.1 - - [05/Jun/2014:12:04:09 -0300] "GET /admin/ HTTP/1.1" 200 833 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
192.168.56.1 - - [05/Jun/2014:12:04:10 -0300] "GET /static/admin/css/base.css HTTP/1.1" 404 142 "http://ubuntu-server/admin/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
192.168.56.1 - - [05/Jun/2014:12:04:10 -0300] "GET /static/admin/css/login.css HTTP/1.1" 404 142 "http://ubuntu-server/admin/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"

エラーは nginx.conf ファイルにあると思いますが、解決方法はわかりません。これはサイトツリーです。

screenshoot

主要ファイル: urls.pysettings.py

4
Lucio

これは、おそらくDjangoまたはNginxの設定の問題です

確認したいことが2つあります。

  1. 静的ファイルはsettings.pyで正しく構成されていますか?基本的なDjangoページの場合、これらの設定は必要ありませんが、静的ファイルの場合は、静的ファイルを構成する必要があります。 Webサーバーが静的ファイルを提供するため、実稼働環境で使用する必要はありません。収集されていますか?設定したら、python manage.py collectstaticを実行する必要があるかもしれません。

    例えば、

    #settings.py
    INSTALLED_APPS += [Django.contrib.staticfiles,]
    STATIC_URL = '/static/'
    STATIC_ROOT = '/your_path/.../static/'
    
    # This collects all files in /static/ directories and puts them in the static ROOT folder.
    python manage.py collectstatic
    
  2. Djangoはそれ自体で静的ファイルを提供しません(DEBUG=Truesettings.pyを設定しない限り)。したがって、静的ファイルを提供するようにエンジンxに設定を追加する必要があります。 nginxを再起動するか、nginx.confの/ static /の構成にautoindex on;を追加する必要があるかもしれません。

静的ファイルのデプロイ を参照してください。

開発では、設定だけでなく、(開発中の)/static/ urlをurls.pyに追加する必要があります。

6
don.joey

同じ問題にぶつかり、nginxの設定を少し変更するだけで解決しました。

これは、静的ファイルを提供するための私のnginx設定でした:

location /static/ {
    root /home/muqube/muqube_website/muqube/muqube_static_root/;
}

解決策は、次のようにrootaliasに置き換えることでした。

location /static/ {
    alias /home/muqube/muqube_website/muqube/muqube_static_root/;
}
3
Raiyan

間違ったファイルパスがあると思います。サーバーが言っていることによると、管理フォルダーと静的フォルダーは同じパスにあります。

Linuxでは、/もルートパスです。ファイルがルートディレクトリにありません。

繰り返しますが、これが役立つことを願っています!

0
Sam-Graham