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