server_name bug

Igor Sysoev is at rambler-co.ru
Mon Nov 3 20:18:00 MSK 2008


On Mon, Nov 03, 2008 at 01:18:16PM +0200, MZ wrote:

> В вт, 21/10/2008 в 21:27 +0300, MZ пишет:
> > Обнаружил такой баг
> > server {
> >   listen *:80;
> >   server_name example.org;
> > }
> > server {
> >   listen 1.2.3.4:80;
> >   server_name default;
> > }
> > 
> > запрос на 1.2.3.4 с Host: example.org попадает не в первый vhost а во
> > второй
> > 
> > nginx 0.6.31
> 
> Небольшой итог этой широко развернувшейся дискуссии.
> 
> 1. Никто так и не сумел привести рабочего примера, когда текущее
> поведение nginx позволяет реализовать то, что не позволяет реализовать
> модифицированное поведение.
> 
> 2. Никто так и не сумел привести аргументов, отличных от
>   - "так реализованы сокеты, и listen никаких дополнительных действий не
>     производит и не должен"
>   - "новую опцию вводить некошерно, и текущих уже достаточно чтоб
>     запутаться"
>   - "менять текущее поведение некошерно, так как что-то где-то может
>     поломаться (хотя никто текущее поведение не использует)"
>   - "новая опция/поведение внесет смуту в умы непросвещенных админов"
> 
> 3. спасение рук утопающих - дело рук самих утопающих
> 
> Спасибо за внимание.

Сейчас к адресам привязаны хэши имён (точное совпадение, *., .*)
и списки регулярных выражений. Если адрес есть только в одном сервере,
то хэшей и списка нет - проверять нечего - он и так дефолтный сервер.
В предлагаемой схеме нужно будет сначала проверять хэши и список для
этого адреса, а потом хэши и список для *:80. В противном случае не
будет работать схема с отсутствующим Host (пустым именем):

   server {
       listen       *:80;
       server_name  ... "";
   }

   server {
       listen       1.2.3.4:80;
       server_name  ... "";
   }

Если у меня есть сайт с выделенным адресом - зачем мне гонять для него
хэши и регулярные выражения ?


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list