Re: Разъяснения по работе proxy_next_upstream
Maxim Dounin
mdounin на mdounin.ru
Ср Май 23 08:49:11 UTC 2012
Hello!
On Wed, May 23, 2012 at 07:03:10PM +1100, Alexander Zhuravlev wrote:
> Добрый день всем.
>
> Не совсем уверен, что дело именно в proxy_next_upstream, поэтому
> поправьте если не прав.
>
> Проблема: есть веб-сервис (java playframework), он обрабатывает
> внешние запросы и хочется умудриться рестартовать сам демон, не
> потеряв пользовательские запросы. Разъясню: сам демон рестартует
> порядка 2 секунд. За это время на nginx поступает порядка 20-50
> запросов. Хочется сложить их в некий буфер и дождаться подъёма
> сервера. Да, понимаю, что запросы будут обрабатываться не 0.1сек, а
> 2.1-2.5сек, но главно чтобы они были обработаны, а не получили
> 502-ую. Насколько я понимаю реализовать это можно только установкой
> самого себя в резервные сервера и установкой таймаута за который
> демон должен рестартовать.
Нет, backup-сервер в общем случае не поможет. Ибо nginx не будет
ничего ждать, а получив ошибку от основного сервера сразу
попробует резервный, и при перезапуске он не ответит.
Надо запускать два бекенда, и рестартовать их по очереди.
>
> Накропал конфиг:
>
> upstream local_upstream {
> server 127.0.0.1:9012 fail_timeout=12s max_fails=1;
> server localhost:9012 backup;
> }
>
> server {
> proxy_connect_timeout 5s;
> listen 80;
> server_name localhost;
> error_log /var/log/nginx/exporter.error.log;
> proxy_next_upstream timeout;
>
> root /opt/app/views;
>
> location / {
> proxy_pass http://local_upstream;
> proxy_set_header Host $http_host;
> }
>
> Считал, что согласно proxy_next_upstream сервер будет считаться
> мёртвым только по истечении времени, но что-то нифига не так :(
Сервер будет считаться мёртвым после получения от него max_fails
ошибок. Параметр fail_timeout влияет на то, как быстро nginx
забудет про предыдущие ошибки, не более того.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru