![Nginx + Gunicorn + Django - nginx не разрешает статические файлы](https://rvso.com/image/617250/Nginx%20%2B%20Gunicorn%20%2B%20Django%20-%20nginx%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B0%D0%B5%D1%82%20%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B.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"
Что-нибудь явно не так? Я все еще получаю ошибку 404 на файлах img и css, когда пытаюсь просмотреть их через выведенный исходный код html.
решение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
Извините за мой плохой английский, я стараюсь улучшить его :(
Надеюсь, ты меня понимаешь.