Составной upstream без перенаправления между серверами
ks2
nginx-forum at nginx.us
Wed Sep 4 06:10:01 UTC 2013
Добрый день,
Имеем секцию апстрим из N серверов:
upstream foo {
server a;
server b;
...
}
Для того, чтобы клиент ни в коем случае не заметил задержек с ответом, мы
возвращаем предопредленный ответ в случае задержки на сервере:
location = /foo {
fastcgi_pass
fastcgi_keep_conn on;
include fastcgi-params.conf;
fastcgi_read_timeout 75ms;
fastcgi_intercept_errors on;
error_page 500 501 502 503 504 = /foo_failover;
}
location = /foo_failover {
root /var/www;
}
Проблема в том, что при задержке с ответом с одного из серверов nginx
перекидывает запрос на другой сервер в апстриме, потом возможно на третий,
видимо ожидая на каждом из серверов не дольше заданных 75 мс, но в сумме
набирается недопустимо длительное время, так как в процессе таких ожиданий и
перекидываний на клиенте срабатывает уже свой таймаут, чего как раз хочется
избежать.
Есть ли более элегантный способ сохранить балансировку нагрузки, но
запретить перенаправление, кроме как заводить N апстримов, каждый из одного
сервера, прописывать им отдельно fastcgi_read_timeout и error_page, а из
локейшена /foo, скажем, проксировать запрос на эти локейшены?
Спасибо!
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,242513,242513#msg-242513
Подробная информация о списке рассылки nginx-ru