Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: server_name bug
В вт, 21/10/2008 в 22:40 +0400, Igor Sysoev пишет:
> On Tue, Oct 21, 2008 at 09:27:40PM +0300, MZ wrote:
>
> > Обнаружил такой баг
> > 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
>
> Это не баг. Сначала проверяются адрес:порт, а только потом имя.
> Поскольку listen 1.2.3.4:80 описан явно, то, с точки зрения nginx'а,
> сервер, в котором он описан, является единственным приёмником таких запросов.
Поскольку присутствует *:80 то приемников для коннектов на 1.2.3.4 уже
не одна штука, а включая все виртхосты с 1.2.3.4:80 и все с *:80.
> Особенно хорошо это видно, если поставить
>
> listen 1.2.3.4:80 default bind;
>
> Тогда соединение в принципе не попадёт в *:80. Так устроены сокеты.
без bind соединение попадает в *:80, но не обрабатывается первым
виртхостом - разве это не баг ?
> Если на 1.2.3.4:80 ожидаются запросы для example.org, то нужно такое:
>
> server {
> listen *:80;
> listen 1.2.3.4:80;
> server_name example.org;
> }
> server {
> listen 1.2.3.4:80;
> server_name default;
> }
А если запросы на example.org ожидаются на любом ипе? Разве *:80 не для
того и сделан, чтоб не перечислять все ипы ?
ЗЫ: я конечно понимаю что чинить это никто не будет, кроме тех кому
надо, - опишите хотя бы этот баг в документации, чтоб у других людей
вопросов не возникало.
|