![Nginx + Gunicorn + Django - nginx は静的ファイルを許可しません](https://rvso.com/image/617250/Nginx%20%2B%20Gunicorn%20%2B%20Django%20-%20nginx%20%E3%81%AF%E9%9D%99%E7%9A%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%A8%B1%E5%8F%AF%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93.png)
コードを更新しましたが、まだ動作しません。
設定.py
STATIC_ROOT = '/home/ubuntu/virtualenv/mysite/homelaunch/static/'
STATIC_URL = '/static/'
nginx の設定:: /etc/nginx/sites-enabled/mysite
server {
server_name ec2-x-x-x-x.compute-1.amazonaws.com;
access_log /home/ubuntu/virtualenv/mysite/error/access.log;
error_log /home/ubuntu/virtualenv/mysite/error/error.log warn;
connection_pool_size 2048;
location /static/ {
#alias /home/ubuntu/virtualenv/mysite/homelaunch/static/;
#alias /static/;
root /home/ubuntu/virtualenv/mysite/homelaunch/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Host $server_name;
#proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
gunicorn 設定 -
command = '/usr/local/bin/gunicorn'
logfile = "/home/ubuntu/virtualenv/mysite/error/gunicorn.log"
loglevel = "info"
pythonpath = '/home/ubuntu/virtualenv/mysite'
bind = '127.0.0.1:8001'
img ディレクトリと css ディレクトリへのフルパス:
/home/ubuntu/virtualenv/mysite/homelaunch/static/css
/home/ubuntu/virtualenv/mysite/homelaunch/static/img
error.log にエラーが記録されます:
001/favicon.ico", host: "ec2-xx-xx-xx-xx.compute-1.amazonaws.com"
2013/09/02 16:57:42 [error] 2819#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: ec2-xx-xx-xx-xx.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", host: "ec2-xx-xx-xx-xx.compute-1.amazonaws.com"
何か明らかに間違っている点はありますか? 出力された HTML ソースから img ファイルと css ファイルを表示しようとすると、依然として 404 エラーが表示されます。
答え1
この回答は解決策を要約するために編集されました。
nginxの設定
置き換え:
alias /home/ubuntu/virtualenv/mysite/homelaunch/;
と:
root /home/ubuntu/virtualenv/mysite/homelaunch/;
によるドキュメンテーション: 「場所がディレクティブの値の最後の部分と一致する場合は、代わりにルート ディレクティブを使用することをお勧めします」
置き換え:
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
と:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
gunicornの設定
置き換え:
bind = 'ec2-x-x-x-x.compute-1.amazonaws.com:8001'
と:
bind = '127.0.0.1:8001'
Djangoの設定で
STATIC_ROOT = '/home/ubuntu/virtualenv/mysite/homelaunch/static/'
正しい絶対ファイルシステム パスを設定します。
DEBUG = True
より詳細なエラー情報を取得するための設定。
答え2
これを置き換えます:
location /static/ {
alias /home/ubuntu/virtualenv/mysite/homelaunch/;
}
これについては:
location /static/ {
alias /home/ubuntu/virtualenv/mysite/homelaunch/static/;
}
エイリアスを作成する場合は、settings.pyで静的ディレクトリを定義しているため、絶対パスを入力する必要があります。
STATIC_URL = '/static/'
したがって、このディレクトリにエイリアス /home/ubuntu/virtualenv/mysite/homelaunch/ を設定すると、
Nginx は、静的ファイルが /home/ubuntu/virtualenv/mysite/homelaunch/ にあり、/home/ubuntu/virtualenv/mysite/homelaunch/static にはないと考えています。
私の英語が下手で申し訳ありません。上達するよう努力します :(
あなたが私の言うことを理解してくれることを願います。