Re: proxy_set_header и наследие

Maxim Dounin mdounin на mdounin.ru
Пт Мар 24 14:11:50 UTC 2017


Hello!

On Fri, Mar 24, 2017 at 03:32:41PM +0200, Vladimir Getmanshchuk wrote:

> > > 2) Если делаешь proxy_set_header дважды (иногда пересекается из-за
> > > include), то получаешь два хедера в HTTP запросе(от чего некоторые
> > backends
> > > сходят с ума, когда видят два хедера Host(например).
> > > Почему не брать значение из последнего proxy_set_header?
> >
> > В HTTP вполне допустимо использование нескольких одинаковых
> > заголовков, более того - явно специфицировано, когда можно, а
> > когда - нельзя, и как трактовать.  И во многих случаях это
> > используется.
> >
> > Было бы странно ограничивать людей в том, что они могут написать в
> > конфиге, причём совсем не так, как специфицирует используемый
> > протокол.
> >
> 
> А какое из значений двух хедеров "Host" будет использовать NGINX для
> определения server_name?

В случае конкретно заголовка Host - nginx испольузет первое из 
полученных значений.  Это поведение, впрочем, историческое, и 
стоит подумать о том, чтобы возвращать в подобных случаях 400, т.к. 
синтаксис заголовка Host нескольких значений не допускает, и 
свежий RFC 7230 явно требует именно 400 в случае нескольких 
заголовков Host.

А вот, скажем, в случае заголовка X-Forwarded-For - nginx честно 
использует все полученные заголовки, интерпретируя их в 
соответствии со стандартом, т.е. два заголовка равносильны одному 
со значениями этих заголовков через запятую.

-- 
Maxim Dounin
http://nginx.org/


Подробная информация о списке рассылки nginx-ru