Hello!
On Mon, Mar 06, 2023 at 05:17:34PM +0300, Evgeniy Berdnikov wrote:
> On Mon, Mar 06, 2023 at 02:22:25PM +0300, Andrey Kopeyko wrote:
> > On Mon, 6 Mar 2023, Nikolay Shaplov wrote:
> > > Я бы с этим всем согласился, приняв на веру, если бы в RFC не было бы
> > > написано:
> > >
> > > The SERVER_NAME variable MUST be set to the name of the server host
> > > to which the client request is directed.
> >
> > Вот это самое правило вы и нарушаете, в описанной вами конфигурации, - но
> > раз вам так надо и вы понимаете что вы делаете, то пускай.
>
> Товарищ, наверное, хотел сказать, что составитель дефолтной конфигурации
> не заметил некоторые проблемы, с которыми могут столнуться пользователи.
> И что если вместо $server_name написать $host, то вероятность возникновения
> этих проблем будет несколько ниже. С чем трудно не согласиться.
>
> Как всегда, ждём, какие аргументы придумают авторы, чтобы ничего не менять. :)
Да вообще легко :))
Дефолтная конфигурация, по историческим причинам, заточена на
конфигурации, где server_name задан: это было поведением по
умолчанию до nginx версии 0.8.48.
Подобная конфигурация в целом предполагает, что запрашиваемое
клиентом имя может использовать для выбора блока server{}, но в
дальнейшем не используется: для всех остальных действий
используется каноническое имя сервера. Например, все
перенаправления возвращаются с использованием канонического имени
сервера (см. server_name_in_redirect).
Очевидно, что в подобной конфигурации SERVER_NAME, передаваемый в
CGI-like бэкенды, тоже должен отражать каноническое имя сервера,
то есть $server_name. Замена его на $host приведёт к
использованию в CGI-like бэкендах некорректного имени,
использование которого не предполагается конфигурацией. Более
того, если речь идёт про сервер по умолчанию для данного
слушающего сокета - то имя окажется полностью под контролем
клиента, что может привести уже к проблемам безопасности, если на
бэкенде что-либо завязано на проверку этого имени.
Суммируя вышеизложенное: замена $server_name на $host
гарантировано сломает конфигурации, полагающиеся на существующее
поведение с передачей на CGI-like бэкенды канонического имени
сервера, и для корректной работы таких конфигураций потребуется
менять $host на $server_name обратно.
Какие конфигурации приоритетнее - сложно сказать, но лично я бы
рекомендовал указывать server_name всегда, а не полагаться на то,
что nginx сможет обрабатывать любые имена. Именно так, в
частности, делает и конфигурация по умолчанию - там server_name
явно указан.
--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru