Django + Nginx выдает 404 при обслуживании статических файлов - PullRequest
0 голосов
/ 02 мая 2018

Каждый раз, когда я загружаю свой сайт, он выдает ошибку 404 при загрузке изображений и CSS.

Мой конфиг nginx:

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.html index.htm;

client_max_body_size 4G;
server_name _;

keepalive_timeout 5;

# Your Django project's media files - amend as required
location /media  {
    alias /home/django/django_project/django_project/media;
}

# your Django project's static files - amend as required
location /static/ {
    alias /home/django/django_project/csite/static/csite/;
    autoindex on;
}

# Proxy the static assests for the Django Admin panel
location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_buffering off;

        proxy_pass http://app_server;
}

}

Мой settings.py:

STATIC_ROOT = os.path.join(BASE_DIR, "csite/static")

STATIC_URL = '/static/'

Вы можете просмотреть структуру каталогов здесь

Мое имя приложения csite.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Это ответ в моем случае, но вы должны найти ответ на свой вопрос. В моем случае у меня есть:

Мой Django IP-сервер: 172.30.10.92

Мой IP-сервер Nginx: 172.30.10.93

1 - Установить и настроить wsgi (находится на сервере Django)

WSGI - это файл, созданный в вашем проекте Django.

Файл находится в /path/to/your/project/Myproject/wsgi.py

Мы должны отредактировать этот файл так:

import os
from django.core.wsgi import get_wsgi_application

import sys sys.path.append('/var/www/html/Myproject')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Myproject.settings")
application = get_wsgi_application()

2 - Установить и настроить gunicorn / supervisor (находится на сервере Django)

Чтобы установить gunicorn / supervisor, вы должны выполнить в своей оболочке:

pip install gunicorn
pip install supervisor

Затем вам нужно создать новый файл в /etc/supervisor/conf.d/Myproject.conf, который будет выглядеть так:

[program:Myproject]
command = /home/valentin/.virtualenvs/MyprojectEnv/bin/gunicorn Myproject.wsgi:application --name "Myproject" --workers=4 --bind=0.0.0.0:8080 -- user="valentin" --group="valentin" ; Command to start app
user = username #You have to replace by your username
stdout_logfile = /var/log/supervisor/supervisor.log
redirect_stderr = true
log
environment=LANG=fr_FR.UTF-8,LC_ALL=fr_FR.UTF-8

Я указал порт 8080 , который является портом связи между моим сервером приложений и моим веб-сервером.

3 - Редактировать файл hosts на сервере nginx (расположен на сервере nginx)

Вы должны отредактировать файл hosts, расположенный в /etc/hosts, и добавить новую запись на ваш сервер Django:

127.0.0.1 localhost 
127.0.1.1 valentin 
172.30.10.92 Myproject

# The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

4- Новый файл конфигурации в репозитории nginx (находится на сервере nginx)

Этот новый файл должен быть помещен в /etc/nginx/sites-available/Myproject.conf

 server {
    listen 8080;
    server_name Myproject;

    root /var/www/html/Myproject/;

    location /static/ {
        root /var/www/html/;
    }

    location / {
        include proxy_params;
        proxy_pass http://172.30.10.92:8080;
        }       
}

IP-адрес соответствует адресу моего сервера Django. Я указал порт прослушивания (8080), путь к моему проекту Django и статический каталог.

Затем необходимо создать символическую ссылку на сайтов с поддержкой .

После этой операции перезапустите службу nginx:

sudo service nginx restart

5- Разрешить IP-адрес nginx в Django (расположен на сервере Django)

Вам необходимо отредактировать файл settings.py , чтобы разрешить IP-адрес nginx в ALLOWED_HOSTS :

ALLOWED_HOSTS = ['localhost', '172.30.10.93', '127.0.0.1', '[::1]']

6 - наконец выполнить gunicorn (находится на сервере Django)

Наконец, вы должны начать Gunicorn. Вы должны быть внутри вашего корневого проекта Django и выполнить:

gunicorn Myproject.wsgi:application --bind 172.30.10.92:8080

Теперь, в вашем браузере, попробуйте подключиться к вашему серверу nginx через порт:

http://172.30.10.93:8080

Работает!

EDIT

Ваш статический каталог не находится в том же каталоге, что и ваш проект django. Создайте новый статический каталог, укажите путь в файле settings.py, а затем сделайте python manage.py collectstatic.

Не забудьте отредактировать файлы nginx.

0 голосов
/ 02 мая 2018

Попробуйте это

location /static/ {
    root /home/django/django_project/csite/;
}
...