Django + Nginx - обслуживать личные файлы с помощью X-Accel-Redirect - PullRequest
1 голос
/ 07 апреля 2019

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

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

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

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

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

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

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, но я пытался некоторое время, и яне могу получить правильную комбинацию.

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

...