В настоящее время у меня есть Django веб-приложение, которое обслуживает Gunicorn. Gunicorn не обслуживает запросы к файлам stati c, поэтому я использую Nginx перед Gunicorn для обработки запросов к файлам stati c. Я в состоянии нормально контейнировать приложение с помощью Docker и могу успешно обслуживать запросы приложений, но Nginx не может правильно обрабатывать запросы к файлам stati c, поскольку Django добавляет конечный sla sh к запросам файла stati c ,
После запуска контейнера Docker со службами Django, Nginx и Postgres я перехожу на домашнюю страницу веб-приложения, и первый запрос в порядке.
HTTP-запрос 200
Остальные входящие запросы после перехода на домашнюю страницу веб-приложения представляют собой stati c файл запрашивает все с 404 кодами ошибок.
HTTP-запрос 404
Коды ошибок 404 указывают, что сервер не может найти файлы stati c, но я могу убедиться, что мои файлы stati c хранятся в правильном месте и присутствуют. Коды ошибок 404 происходят потому, что запросы Django stati c файла добавляют завершающий sla sh к запросу. Итак, прочитав документацию Nginx, я обнаружил, что Nginx обрабатывает все запросы файла stati c с завершающими косыми чертами как запросы на каталоги и, таким образом, ищет файл индекса. html, описывающий содержимое каталога. Однако все мои запросы к файлам stati c относятся именно к файлам. Поэтому Nginx добавляет /index.html ко всем запросам файла stati c, в результате чего Nginx не может найти нужный файл stati c.
Итак, есть ли настройка Django или Nginx, которую я могу изменить, чтобы либо обслуживать запросы файлов stati c с завершающими косыми чертами как запросы файлов, а не запросы каталогов, или есть Django настройку, которую я могу изменить, чтобы гарантировать, что запросы файла * stati c не содержат завершающий sla sh.
Для справки я приложил мои настройки stati c, файл конфигурации Nginx и подтверждение того, что мои файлы stati c присутствуют и находятся в нужном каталоге.
Django stati c настройки
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Nginx файл конфигурации
# upstream group for the backend
upstream django {
server web:8000;
}
server {
listen 80;
# root directory for static files
root /usr/src/app/;
# proxy to the nginx unit backend
location / {
proxy_pass http://django;
}
location /static/ {
alias /usr/src/app/static/;
}
}
Проверка того, что файлы stati c хранятся в правильном месте
Stati c Проверка местоположения файла