Nginx не обслуживается Django Stati c Файлы правильно из-за косой черты - PullRequest
0 голосов
/ 13 апреля 2020

В настоящее время у меня есть 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 Проверка местоположения файла

...