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

Ответить