server_name bug

Dmitriy MiksIr miksir at maker.ru
Sat Nov 1 14:31:07 MSK 2008


Andrey N. Oktyabrski пишет:
> Dmitriy MiksIr wrote:
>> Почему же?
>> Если есть два сервера
>> server_name *.domain.ru
>> и
>> server_name old.domain.ru
>> описанных именно в этом порядке
>> и запрос приходит на old.domain.ru - в каком сервере логично этот 
>> запрос отработать?
> Не надо выдёргивать фразы из контекста. Если есть такие server_name и 
> запрос приедет на адрес, явно прописанный в listen для *.domain.ru c 
> Host: old.domain.ru, nginx отправит его в первый server, не глядя на 
> server_name вообще, если old.domain.ru висит на *:80. То есть, выбор 
> хоста по адресу (по логике сокетов) сейчас имеет приоритет над выбором 
> хоста по имени.
>

И это логично, ибо сначала происходит tcp соединение, а уже потом - 
отсылка Host и т.д. и т.п. Просто Вы почему-то считаете, что 
listen+server_name - это неразрывная пара для определения name-based 
виртуального сервера (терминами апача). Но это не так - listen отдельно 
и отвечает за установку tcp соединения (вооще не только http есть в 
nginx), а уже потом по _выбранному_ сокету приходят Host и выбор сервера 
по нему. Гляда на такую последовательность действий - все тоже 
становится очень логично. Логика, она вообще такая штука - зависит с 
какой стороны посмотреть.













More information about the nginx-ru mailing list