2016-11-13 9 views
0

私はnginxのはジャンゴ+ nginxの+ Gunicorn - 静的ファイルのための404をデバッグが

の/ etc/nginxの/サイト利用可能/デフォルトの静的ファイルを提供する方法を知らない偽です:

upstream example.com { 
    server unix:/home/www/example/env/run/gunicorn.sock fail_timeout=0; 
} 

server { 
    listen 80; 
    server_name example.com; 
    client_max_body_size 4G; 

    access_log /home/www/example/logs/nginx-access.log; 
    error_log //home/www/example/logs/nginx-error.log; 

    location /static/ { 
     alias /home/www/example/codeab/static/; 
    } 

    location /uploads/ { 
     alias /home/www/example/codeab/uploads/; 
    } 
    location/{ 
     include proxy_params; 
     proxy_pass http://unix:/home/www/example/env/run/gunicorn.sock; 
    } 
    # Error pages 
    error_page 500 502 503 504 /500.html; 
    location = /500.html { 
     root /home/www/example/templates/; 
    } 
    error_page 404 /401.html; 
    location = /401.html { 
     root /home/www/example/codeab/templates/; 
     internal; 
    } 
} 

Djangoの設定nginxのがあるようですDEBUGを= Falseの

前の.py

STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static_content/'), 
) 
STATIC_ROOT = os.path.join(BASE_DIR,'static/') 

はまた、私がやったcollectstatic上記の設定ファイルを考慮していないので、404ページはカスタム401.htmlページを表示していません。

設定を編集した後、私は助けるか、私はどんな事をしないのです場合は私に知らせてください

sudo ln -s /etc/site-available/default /etc/site-enabled/default 
service nginx reload 
sudo service nginx restart 

によってサイト対応にそれをリンクさ。

+0

ようこそスタックオーバーフロー!問題の詳細な説明を投稿していただきありがとうございます。私たちがあなたの問題の要点に立ち入る前に、いくつかの事柄。 NGINXに設定ファイルが表示されない場合は、静的ファイルに対して404をどのように返しますか?あなたが最後に述べたリンクは正しいですが、 'include/etc/site-enabled/*;'や 'include/etc/site-enabled/* 'を使っているなら' nginx.conf'をチェックする必要があります。 .conf; '* .conf'の場合、' default'の名前を 'default.conf'に変更する必要があります。また、あなたの 'site-enabled'と' site-available'が '/ etc /'に座っているのがちょっと奇妙です。 –

+0

これは標準インストールではありません。カスタム4xxテンプレートの場合:NGINXがこれを提供している場合は、静的HTMLファイルである必要があります。それはDjangoによって処理されていないので、それにはtemplatetagsを持つことはできません。私の提案は、このためにDjangoの内部エラーテンプレートを使用することです。最後に、あなたの静的ファイルについては、configが正しいです。私が変える唯一のものは 'location ^〜/ static/{'です。そうすれば、NGINXは正規表現のマッチをしなければならず、ストリングの比較ができないことが分かります。 –

+0

こんにちはKeenan、すばやい応答に感謝します。私は自分のnginx.confをチェックしました、 'include/etc/site-enabled/*;'なのでファイル名は正しいです、つまり 'default' – anuj249

答えて

0

ちょうどstatic_contentフォルダの内側に配置されている 静的ファイルを実行したpython manage.py collectstaticコマンドの後、

location /static/ { 
     alias /home/www/example/codeab/static/; 
    } 

location /static/ { 
     alias /home/www/example/codeab/static_content/; 
    } 

理由からnginxのサーバーのブロックにあなたの設定を変更します。

+0

試しても、まだ動作しません。 collectstaticを実行すると、static_contentのすべてのファイルが静的フォルダに配置されます。それはあなたが投票した理由です。 – anuj249

+0

解決策を見つけましたか? – pitaside

1

私は厳密解を知らないが、それはように私xxx.xxx.xx.xx:80からxxx.xx.xx.xx:8000 に結合gunicornと編集の設定を変更することに取り組んで始めた - 私は靴下ファイルのproxy_passをコメントして、あなたのように新しい行を追加

location/{ 
     include proxy_params; 
     #proxy_pass http://unix:/home/www/example/env/run/gunicorn.sock; 
     proxy_pass http://xxx.xxx.xx.xx:8000; 
    } 

上記を見ることができます。

0

Nginxは、nginx設定ファイルで定義されているディレクトリからlocation /static/の下に静的ファイルを提供し、定義されたディレクトリ内で静的リソースが見つからない場合、nginx configに定義されているカスタム404 HTMLページにリダイレクトします。

それはジャンゴのurls.pyファイルのいずれかで与えられたURLが見つからないときDjangoはあなたがsettings.pyにDebug = Falseを設定しても、カスタム404を含むディレクトリに設定'TEMPLATES'-'DIRS'を指して、カスタム404 htmlページを表示htmlファイルとしてDjango documentationで説明されています。

したがって、nginxとDjangoが同じ404 htmlページを表示する方法は、効果的には互いに異なり、互いに独立しています。

関連する問題