Hello! On Mon, Nov 20, 2017 at 04:43:05PM +0300, CoDDoC wrote:
> Ладно, с этим разберусь. > Еще толику Вашего времени... Не совсем в тему, но почти. О выборе секции > server для обработки запроса. > > Я слегка запутался, что от чего зависит: $host от $server_name или наоборот? > Вот как я это понимаю. > > 1. Сначала неправильный запрос: > echo -e 'HEAD http://www.other-domain.com/some-path > HTTP/1.1\n''host:www.my-domain.com\n''user-agent:NCAT-TEST\n'| ncat > www.my-domain.com 80 > Как все происходит (ИМХО): > 1.1. Получаем значение $host из строки запроса: $host = www.other-domain.com > На заголовок ($http_host = www.my-domain.com) в данном случае не смотрим. > 1.2. Ищем секцию, соответствующую значению $host для заданного порта (80) > 1.3. Такой секции не существует, запрос передается в дефолтовую, и получаем > $server_name = _ > > ---------------------------------------------------- > 2. Теперь правильный запрос: > echo -e 'HEAD / > HTTP/1.1\n''host:www.my-domain.com\n''user-agent:NCAT-TEST\n'| ncat > www.my-domain.com 80 > 2.1. В строке запроса хоста нет, берем из заголовка ($http_host = > www.my-domain.com). > Получаем значение $host из $http_host: $host= www.my-domain.com > 2.2. Ищем секцию, соответствующую значению $host для заданного порта (80) > 2.3. Передаем в нее запрос и получаем $server_name = www.my-domain.com > > ---------------------------------------------------- > 3. Опять неправильный запрос с пустым $http_host: > echo -e 'HEAD / HTTP/1.1\n''host:\n''user-agent:NCAT-TEST\n'| ncat > www.my-domain.com 80 > 3.1. Значения $host = '' и $http_host = '' > 3.2. Ищем секцию, соответствующую значению $host для заданного порта (80) > 3.3. Такой секции не существует, запрос передается в дефолтовую, и получаем > $server_name = _ > 3.4. $host получает значение $server_name, т.е. $host = _ > Т.е., в отличие от примера 2, не $server_name получаем из $host, а $host из > $server_name > > Я верно понимаю алгоритм? Да, как-то так. Если в строке запроса используется полный адрес, то $host берётся оттуда. Иначе - из заголовка Host. Если заголовок Host отсутствует или пустой - будет использовано имя сервера, которое также доступно в переменной $server_name. Документация тут: http://nginx.org/ru/docs/http/ngx_http_core_module.html#var_host http://nginx.org/ru/docs/http/ngx_http_core_module.html#server_name -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
