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