Подтвердить что ты не робот

Статические файлы django nginx 404

Вот мои настройки:

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

STATIC_ROOT = '/home/django-projects/tshirtnation/staticfiles'

Здесь моя конфигурация nginx:

server {
    server_name 77.241.197.95;

    access_log off;

    location /static/ {
        alias /home/django-projects/tshirtnation/staticfiles/;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
        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"';
    }
}

Я запустил python manage.py collectstatic и скопировал все статические файлы. Я запускаю свой сервер с gunicorn_django --bind: my-ip: 8001, и все работает, за исключением статических файлов.

EDIT: Я запустил

sudo tail /var/log/nginx/error.log

и, похоже, ошибок в статических файлах не обнаружено:/

4b9b3361

Ответ 1

Я столкнулся с той же проблемой и смог исправить мою конфигурацию nginx, удалив конечный / из местоположения /static/.

location /static {  # "/static" NOT "/static/"
    # ...
}

Ответ 2

Попробуйте добавить модификатор префикса ^~ к своему статическому местоположению, чтобы пропустить проверку регулярных выражений:

location ^~ /static/ {
    alias /home/django-projects/tshirtnation/staticfiles/;
}

Ответ 3

Ваша проблема в том, что блок location / всегда используется, даже после location /static/, поэтому все будет proxy_pass ed.
Решением здесь является использование магии try_files.

server {
    server_name 77.241.197.95;

    access_log off;

    location / {
        try_files $uri @django;
    }

    location /static/ {
        alias /home/django-projects/tshirtnation/staticfiles/;
        try_files $uri =404;
        # here we use =404 because there is no need to pass it to gunicorn.
    }

    location @djago {
        proxy_pass http://127.0.0.1:8001;
        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"';
    }
}

Ответ 4

В вашем файле settings.py введите следующее:

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder'
)
STATIC_ROOT = "/home/django-projects/tshirtnation/staticfiles/"
STATIC_URL = '/static/'

Вам это не нужно:

STATICFILES_DIRS = ...

Ответ 5

Я думаю, браузер пытается найти ваш статический текст в:

http://127.0.0.1:8001/static/

Пока nginx по умолчанию работает на 80 портах.

Вам нужно определить порт 8001 в конфигурации nginx или запустить сервер django на 80 портах.

Ответ 6

Проверьте это.

1 Доступна ли статическая старая nginx, я имею в виду разрешение папки.

2 Или сделайте это

Замените это:

STATIC_ROOT = '/home/django-projects/tshirtnation/staticfiles'

с этим

STATIC_ROOT = ''

И добавьте это в настройки

STATICFILES_DIRS = (
     '/home/django-projects/tshirtnation/staticfiles/',
)

Не забудьте перезагрузить сервер nginx.

Надеюсь, что это сработает.

Ответ 7

Моя выглядит так, и это сработало:

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), '..', 'static'),
)

И в конфигурации nginx мое местоположение/статическое/находится выше местоположения/как это,

location /static {
    //
}

# Finally, send all non-media requests to the Django server.
location / {
    //
}

И еще одна вещь, я не знаю, имеет ли это значение, но у меня есть "слушать" на сервере {}. Я не уверен, может ли это помочь.

Ответ 8

попробуйте это в settings.py:

import os
ROOT_PATH = os.path.dirname(__file__)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(ROOT_PATH,'static/')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]

и файл конфигурации в nginx (или настройках вашего сервера):

location /static {
    alias /home/djangohome/static; # your Django project static files - amend as required
}

Ответ 9

Попробуйте удалить косую черту в настройках nginx, а затем статическую, например. Он должен быть "/static" не "/static/" , и если ваши настройки были в порядке, попробуйте перезагрузить сервер на локальном компьютере и попробуйте перезагрузить его на удаленном компьютере. Я столкнулся с подобным, но после перезагрузки машины исправил проблему.

Ответ 10

Используйте STATIC_URL с доменом. Это важно!