Проблемы с обслуживанием загруженных изображений на Django

После того, как пользователь загрузил изображение, он всегда возвращает ошибку 404. Я думаю, что это ошибка конфигурации Nginx, но я не уверен в этом, и после нескольких часов поиска и попыток я все еще не понимаю проблему.

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

DEBUG = False
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'static'),
)

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

Далее мой urls.py:

urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

И мой файл конфигурации Nginx:

location ^/static/ {
    autoindex on;
    alias /home/user/mywebsite/site/static;
}

location ^/media/ {
    alias /home/user/mywebsite/site/media;
}

Вот сгенерированный URL изображения: https://www.mywebsite.com/media/CACHE/images/img/venus/758c9f7d70d0c64b5631cc865986de48.jpg (404)

Я использую Django Imagekit для обработки загруженных изображений. Я всегда находил эти URL-адреса странными ... может быть, ImageKit нужна дополнительная настройка?

Мои статические и медиа-каталоги находятся в /mainappdjango/static, а не в корневом каталоге. Если я этого не сделаю, моя статика не будет загружена. Изображение хорошо загружено на сервер (я могу получить к нему доступ по FTP или SSH).

Есть ли у вас какие-либо идеи о проблемах, вызывающих эти ошибки 404? :/

Большое спасибо!


person Zoloom    schedule 20.09.2018    source источник
comment
Какой путь к медиа-изображению при просмотре через ssh? Вы говорите, что они находятся в /mainappdjango/static/media, но nginx указывает на mywebsite/site/media. И у вас не должно быть URL-адреса мультимедиа в вашем urls.py. Ваше приложение Django не обслуживает медиафайлы.   -  person dirkgroten    schedule 21.09.2018
comment
Спасибо, я удалил строку в своем urls.py. Вот мой путь на моем сервере... ~/user/mywebsite/media/CACHE/images/img/venus_kMHza3Y/a154c07683def505960eb63c63ca541e.jpg   -  person Zoloom    schedule 22.09.2018
comment
Что такое ~? И почему у вас /site/ между mywebsite и media в настройках nginx?   -  person dirkgroten    schedule 22.09.2018
comment
Это мой терминал возврата, так что ~ мой домашний каталог. сайт - это место, где хранится мой веб-сайт, например, мой корневой скрипт в супервизоре: /home/user/mywebsite/site   -  person Zoloom    schedule 22.09.2018
comment
Вам нужен полный путь, и вы должны использовать его для nginx.   -  person dirkgroten    schedule 22.09.2018
comment
Я знаю, что ~ это ваш домашний каталог. Я спрашиваю, каков путь ~   -  person dirkgroten    schedule 22.09.2018
comment
Это /дом/пользователь   -  person Zoloom    schedule 22.09.2018
comment
Я сделал ошибку: я забыл основное приложение Django в пути nginx, потому что я переместил свои каталоги static + media в свой основной каталог приложения.   -  person Zoloom    schedule 22.09.2018
comment
Что ж, тогда просто удалите /site/ в конфигурации nginx, и он должен совпадать. Также проверьте журналы nginx, если они все еще не работают, обычно в /var/log/nginx.   -  person dirkgroten    schedule 22.09.2018
comment
В любом случае размещение мультимедиа в каталоге вашего приложения — плохая идея, потому что обычно каталог вашего приложения необходимо получать из системы контроля версий, такой как git. И медиа не является частью репозитория   -  person dirkgroten    schedule 22.09.2018
comment
Что ж, извините, сегодня вечером у меня, должно быть, мозг сдох, но мой полный путь к моему медиа-каталогу: /home/user/mywebsite/site/mywebsite/media/ (я пробовал cd ... на нем, я уверен ).   -  person Zoloom    schedule 22.09.2018
comment
Ну хорошо, какую структуру каталогов я должен использовать, чтобы иметь как локальные, так и онлайн-ресурсы? Когда я не помещаю его в подкаталог своего приложения, я не могу загружать активы онлайн.   -  person Zoloom    schedule 22.09.2018
comment
Команда pwd показывает полный путь. В любом случае, это путь, который нужен nginx.   -  person dirkgroten    schedule 22.09.2018
comment
Извините, для локального вам понадобится URL-шаблон, который я сказал вам удалить. Лучше всего обернуть его в if settings.DEBUG, чтобы он не использовался для производства. Ваш MEDIA_ROOT может быть вне каталога вашего проекта, без проблем. Также работает с локальными runserver   -  person dirkgroten    schedule 22.09.2018
comment
Я делаю компакт-диск в терминале в свой каталог мультимедиа и вставляю именно то, что у меня есть с помощью pwd. Для стека я изменил свое имя пользователя или около того, и это сбивает с толку, извините за это, мне нужно подчеркнуть: мой корневой каталог в Nginx: /home/chuck/domi/site/domi Мой статический каталог: псевдоним / главная/патрон/доми/сайт/доми/статический/; Мой медиа-каталог: псевдоним /home/chuck/domi/site/domi/media;   -  person Zoloom    schedule 22.09.2018
comment
Давайте продолжим это обсуждение в чате.   -  person Zoloom    schedule 22.09.2018
comment
Когда вы задаете вопросы по SO, убедитесь, что вы копируете и вставляете код и конфиги. Не редактируйте их. Как вы хотите, чтобы мы помогли исправить ситуацию, если код, который вы показываете, не тот, который вы используете? Итак, теперь вы говорите, что псевдоним в nginx точно такой же, как путь к медиафайлам на вашем сервере? Затем посмотрите логи nginx и проверьте там ошибки.   -  person dirkgroten    schedule 22.09.2018
comment
Мне очень жаль... Я проверяю журналы Nginx!   -  person Zoloom    schedule 22.09.2018
comment
21.09.2018 23:40:37 [ошибка] 1480#1480: *3 open() /home/chuck/domi/site/domi/media/CACHE/images/img/venus_kMHza3Y/a154c07683def505960eb63c63ca541e.jpg не удалось (2: Файл не найден [...]   -  person Zoloom    schedule 22.09.2018
comment
Итак, моя новая конфигурация: location /media/ {autoindex on; псевдоним /home/chuck/domi/site/domi/media/; }   -  person Zoloom    schedule 22.09.2018
comment
Хорошо понял. Изображение пропадает в КЕШЕ. Я думаю, что моя конфигурация GIT могла бы объяснить это. Итак... пришло время сделать все правильно, я полностью перестрою свой проект, чтобы было что-то ясное. Спасибо за вашу помощь !!   -  person Zoloom    schedule 22.09.2018


Ответы (1)


у вас неправильный конфиг nginx. надо добавить салаш.

location /static/ {
    alias /home/user/mywebsite/site/static/;
    autoindex on;
}
location /media/{
  alias /home/user/mywebsite/site/media/;
  autoindex on;
}
person aman kumar    schedule 20.09.2018
comment
Спасибо за ваш ответ, но он все равно возвращает 404 :'( - person Zoloom; 20.09.2018
comment
Кстати, там нужны '^'? - person Zoloom; 20.09.2018
comment
Должен ли я создать запись Nginx для кеша? - person Zoloom; 20.09.2018
comment
можете ли вы проверить этот путь на сервере /home/user/mywebsite/site/media/CACHE/images/img/venus/758c9f7d70d0c64b5631cc865986de48.jpg он существует или нет - person aman kumar; 21.09.2018
comment
Он существует :/ Для меня эта проблема не имеет смысла. - person Zoloom; 21.09.2018
comment
можешь попробовать убрать ^ в nginx - person aman kumar; 21.09.2018
comment
Это ничего не меняет :/ - person Zoloom; 21.09.2018