Возвращает ссылку на загружаемый файл, заданную строкой с помощью Django

#django

#django

Вопрос:

Учитывая строку URL, которая указывает на файл в моем локальном экземпляре nginx, как мне заставить Django вернуть ответ, который приведет к загрузке файла из nginx? Я не хочу, чтобы Django открывал файл и передавал его в потоковом режиме.

Ответ №1:

Используйте X-Accel-Redirect заголовок: http://wiki.nginx.org/XSendfile

Например:

 resp = HttpResponse()
resp['X-Accel-Redirect'] = "/static/my_file"
return resp
  

Обратите внимание, что, согласно документации, вам нужно будет преобразовать локальный путь в URL-адрес, который может обслуживать nginx.

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

1. Итак, я новичок в этом и немного смущен. Мой nginx находится на localhost:8001, и apache переписывает все localhost/static/file -> localhost:8001/file . Я попробовал то, что вы сказали выше (возможно, неправильно). Должен ли мой URL-адрес x-accel-redirect содержать ‘localhost: 8001’?

2. Вы должны настроить nginx для обслуживания статических файлов из некоторого базового каталога (например: location /static/ { internal; root /my/static/files/; } ), затем вернуть абсолютный URL-адрес, который указывает где-то там. Например, если вы хотите обслуживать /my/static/files/my_file , вы должны использовать /static/my_file .