Hello! On Mon, Mar 13, 2023 at 10:50:37AM +0300, Nikolay Shaplov wrote:
> В письме от понедельник, 13 марта 2023 г. 10:46:51 MSK пользователь Maksim > Kulik написал: > > Мне кажется, что в RFC речь идет скорее про разные блоки server {}, т.к. > > речь явно про several virtual hosts, а не про several server names. То есть > > веб-сервер вполне корректно по RFC выбирает блок server {} по имени хоста и > > используется главное имя этого блока далее в работе. > > Вы в своем примере имеете один виртуал хост и N имен (алиасов, если хотите) > > в нем, где N может быть бесконечным в случае дефолтного хоста. Ваш сервер и > > выбирает этот самый хост по имени, которое видит в заголовке. > Правильно. И то имя которое совпало должно попасть в переменную окружения > SERVER_NAME > > Ну даже если не читать сам текст RFC (а там по-моему предельно ясно все > написано), из соображений общий логики, почему в SERVER_NAME попадает первый > из алиасов, а не тот на который пришли??? В этом нет вообще никакой логики. Потому что первое из имён, указанных в директиве server_name - каноническое. Это, кстати, явно описано в документации (https://nginx.org/ru/docs/http/ngx_http_core_module.html#server_name): : Первое имя становится основным именем сервера. Разделение на каноническое имя и алиасы - оно ещё из Apache, где имя сервера указывается отдельно, директивой ServerName, а алиасы, соответственно, директивой ServerAlias. В nginx'е всех отличий в этом плане - алиасы задаются с помощью той же директивы server_name. Выбор же между "использовать каноническое имя" или "использовать имя, на которое пришли" - это вопрос, в первую очередь, желаемого поведения. Скажем, мы можем хотеть во всех перенаправлениях / ссылках / текстах использовать каноническое имя, чтобы пользователь получал одно и то же, независимо от того, по какому конкретно имени он пришёл. Например, это может быть важно, чтобы тексты сгенерированных страниц всегда совпадали, и их можно было кэшировать для всех пользователей. Или просто из эстетических соображений. Или наоборот, можем хотеть, чтобы пользователю всегда возвращались ссылки ровно с тем именем, на которое он пришёл, потому что для разных пользователей сайт может быть доступен под разными именами. Что именно нужно в конкретной конфигурации - это решение того, кто пишет конфигурацию nginx'а. В некоторых случаях оно явно вынесено в отдельные директивы (см. упоминавшуюся ранее server_name_in_redirect), в случае же CGI-like бэкендов оно делается неявно с помощью задания переменной SERVER_NAME. -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-ru