Я новичок в этом, но мое понимание того, как это работает, выглядит следующим образом:
Запросить приватный файл у 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?