Re: X-Accel-Redirect + proxy_pass не сохраняет заголовок Content-Type
Maxim Dounin
mdounin на mdounin.ru
Ср Апр 13 15:21:01 UTC 2016
Hello!
On Wed, Apr 13, 2016 at 12:37:07PM +0000, Сергей Трофимов wrote:
> Имеется конфигурация: nginx 1.8.1, X-Accel-Redirect + try_files $uri
> @upstream
> Своими словами - нужно отдавать через x-accel-redirect файлы, которые могут
> лежать или на локальном диске или на другом сервере.
> Приложение устанавливает заголовки X-Accel-Redirect и Content-Type.
>
> Ожидаемое поведение: заголовок Content-Type будет без изменения передан
> клиенту.
> Наблюдаемое поведение: в случае, если происходит proxy_pass на upstream, то
> клиенту передаётся заголовок Content-Type полученный от upstream.
Заголовок Content-Type сохраняется из ответа с X-Accel-Redirect,
однако если в ходе дальнейшей обработки он будет явно установлен
заново - клиенту уйдёт уже новый заголовок.
Обработка статических файлов достаточно умна, чтобы не
устанавливать Content-Type повторно без нужды, однако если
Content-Type возвращает бекенд - то nginx его и использует, если
не указано иное.
А, скажем, в случае Set-Cookie - клиенту уйдут куки как из
исходного ответа с X-Accel-Redirect, так и из реального ответа.
> Я решил эту проблему добавив proxy_hide_header Content-Type; к location
> @filestorage.
Да, это правильное решение.
> Я нашёл в документации такое утверждение:
> https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile/
Отмечу в скобках, что это wiki, не документация. Там может быть
что угодно. Документация находится по адресу
http://nginx.org/ru/docs/.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru