Django Nginx — обслуживать личные файлы с помощью X-Accel-Redirect

#django #nginx #x-accel-redirect

#django #nginx #x-accel-redirect

Вопрос:

Я новичок в этом, но мое понимание того, как это работает, заключается в следующем:

Запросить личный файл у nginx

nginx пересылает это в django

django делает свое дело и возвращает ответ, содержащий X-Accel-Redirect заголовок

nginx видит этот заголовок и обслуживает файл.

Я настроил свой nginx conf следующим образом:

 upstream foo_app_server {
  server unix:/home/project_dir/gunicorn.sock fail_timeout=0;
}

server {

    listen   80;
    server_name foo.com;

    client_max_body_size 4G;

    location /static/ {
        alias   /home/projec_dir/static/;
    }

    location /media/private/ {
        internal;
        alias   /home/project_dir/media/private/;

    }

    location /media/ {
        alias   /home/project_dir/media/public/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://foo_app_server;
    }

}
  

Теперь django успешно получает запрос на файлы в media / private и успешно присоединяет заголовок X-Accel-Redirect к ответу.

Я попробовал следующее для содержимого заголовка, когда запрашиваемый путь имеет вид media/private/some/path/to/file.pdf

 X-Accel-Redirect:
    media/private/some/path/to/file.pdf
    private/some/path/to/file.pdf
    path/to/file.pdf
  

Все они выдали мне 404 ошибки. Файл определенно существует.

Я думаю, что это просто проблема с путем, из-за несоответствия между путем в заголовке и местоположением и псевдонимом в nginx conf, но я пытался некоторое время, и я не могу получить правильную комбинацию.

Может ли кто-нибудь, кто делал это раньше, подсказать, что именно ищет nginx?

Комментарии:

1. вы нашли решение?