Назад | Перейти на главную страницу

Обслуживание файлов с помощью nginx и django

Я пытаюсь обслуживать защищенные файлы с помощью nginx, используя X-Accel-Redirect заголовок, следуя этот учебник (и многие другие).

физический путь: /home/media/file.pdf

URL: example.com/media/file.pdf

Конфигурация nginx:

location /media/ {
    internal;
    alias /home/;
}

В django у меня есть промежуточное ПО, которое проверяет, аутентифицирован ли пользователь, и если да, то использует X-Accel-Redirect для nginx для передачи файла:

response["X-Accel-Redirect"] = request.path

Когда я пытаюсь получить доступ к файлу, я получаю ошибку 404 (запрошенный путь к файлу в порядке в журнале доступа). Мне кажется, что nginx не передаст запрос django и просто завершится ошибкой 404.

Есть идеи, что я делаю неправильно? Есть ли хороший способ отладить это? Заранее спасибо.

Проблема в различии между alias и root. С участием alias как вы определили, URI /media/file.pdf будет отображать физическое местоположение /home/file.pdf.

Вам нужно использовать root:

location /media/ {
    internal;
    root /home;
}

Видеть этот и этот для подробностей.