Обслуживание статических файлов из nginx с помощью django + fastcgi debian - PullRequest
1 голос
/ 13 июля 2011

Я немного взволнован, когда дело доходит до нового способа обработки статических файлов с django 1.3, однако я уверен, что здесь не виновата django.

Я пытаюсь запустить приложение django с nginx + fastcgi на облачном сервере с установленным Debian.На данный момент у нас есть только один сервер (пока мы разрабатываем), и мы постараемся запустить несколько серверов с балансировщиком нагрузки, чтобы сделать это немного проще, однако у меня возникли проблемы с получением nginx для обслуживания статических файлов.

Я следовал различным учебным пособиям по настройке nginx.conf для обслуживания файлов

server {
    listen 80;
    server_name 127.0.0.1;

    location /static  {
        autoindex on;
        root /static;
    }
}

Выше приведен отрывок из nginx.conf.Теперь, независимо от того, какой я установил root, nginx выдает ошибку 404 not found при попытке доступа к http://127.0.0.1/static/.

Структура файла выглядит следующим образом:

/home/user/site/project
/home/user/site/static
/home/user/site/templates

Django settings.pyимеет следующее настроенное как STATIC_ROOT и STATIC_URL

STATIC_ROOT = "/home/user/site/static/"
STATIC_URL  = "http://127.0.0.1/static/"

Если бы кто-то мог указать нам правильное направление, где это сделать, это было бы фантастически.

Ответы [ 4 ]

3 голосов
/ 13 июля 2011
root /static

Разве это не должно быть /home/user/site/static вместо этого?

1 голос
/ 07 января 2013

Проверьте разницу между использованием ' root ' или ' alias '.В основном, в случае использования «root», путь рядом с «location» (/ static /) добавляется в path, а в случае «alias» он будет игнорироваться.

1 голос
/ 14 июля 2011

Обнаружено разрешение, основанное на ответе Джима выше.

root /static 

Теперь изменено на:

root /home/user/site/static

Однако при проверке журналов кажется, что путь nginx пыталсянайти в http://127.0.0.1/static был / home / пользователь / сайт / статический / статический / что, очевидно, неверно.

Я не уверен, что это правильный метод, однако сейчас я указываю все статические файлыв корень (устраняя необходимость в / static в URL. поэтому для / static / images я сейчас просто указываю на http://127.0.0.1/images/.

0 голосов
/ 14 июля 2011

Ознакомьтесь с документацией директивы root, в отличие от директивы псевдонима Apache, соответствие местоположения не отбрасывается.Поэтому, когда вы указываете местоположение static, папка, которую вы определяете как корень, должна содержать папку static.Так что не неправильно, что nginx ищет /home/user/site/static/static это намеренное поведение.

Я бы даже предпочел использовать http://host/static/images в качестве URL для показа статических изображений.Таким образом, он следует документации Django Управление статическими файлами , в которой предлагается использовать префикс для статических файлов.В противном случае у вас будет несколько папок для разного статического содержимого, загромождающего папки вашего проекта и приложения.

...