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