On Thu, 30 Dec 2004, Dmitry Kondratyev wrote:
> Igor Sysoev wrote:
>
> >>Игорь, насколько я помню, ты как-то писал, что резолвинг имени бэкенда
> >>происходит только один раз, при запуске. Нельзя ли сделать, чтобы он
> >>проходил при каждой попытке проксирования, чтобы "умный" днс-сервер
> >>возвращал адрес наиболее пригодного на данный момент сервера? mod_accel
> >>такое вроде умел, хотелось бы подобное в nginx увидеть. :-)
> >
> > Резолвинг происходит не только при запуске, но и при каждом сигнале -HUP.
> > Что касается резолвинга при каждом запросе, то тут вот какая проблема:
> > gethostbyname() - это блокирущаяся операция и на время ответа от dns-сервера
> > рабочий процесс nginx'а не будет обслуживать запросы. Уменьшить это время
> > можно, например, так - кэшировать адреса, скажем, на минуту и поставить
> > dns-сервер на ту же машину, что и nginx. Но планах есть написание своего
> > резолвера, который бы не блокировал процесс.
>
> А при убивания по sighup процессы, которые уже имеющиеся кип-элайвы
> держат, буду новые адреса использовать? Может и такую схему тогда
> использую. А может апача всё-таки в качестве ещё одной прослойки
> поставлю тогда. А может дождусь пока у тебя резолвер свой будет. Всё
> зависит от того, когда я свой днс-сервер этот допишу. :-)
По -HUP старые процессы используют старую конфигурацию и старые адреса.
Keep-alive соединения после получения -HUP закрываются так:
*) соедиение держится открытым до истечения таймаута (это фича);
*) если по этому соединению пришёл запрос, то окончанию его обработки
соедиение закрывается.
> > Кстати, проблема с "Can't assign requested address" разрешилась или нет ?
>
> Да, сейчас у меня везде 0.1.11 - проблем никаких нет.
То есть,
net.inet.ip.portrange.randomized=0
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65535
помогли ?
Кстати, я правильно понимаю, что эта ошибка была только при соедиении
к серверу на той же машине ?
Игорь Сысоев
http://sysoev.ru