upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; } server { location / { proxy_pass http://backend; } }
В апстрим имя сервера указываем без префикса протокола (http), иначе ругнётся. Протокол указывается в proxy_pass.
weight=5 - указывает вес сервера, по умолчанию 1. Означает, что на этот сервер будет отправлено 5 запросов, после чего будет выбран следующий сервер.
max_fails=3 - сколько может быть неудачных попыток за время fail_timeout, после чего сервер будет помечен как сломанный и временно (на время fail_timeout) исключен из списка. Если не задано, по умолчанию 1 попытка. 0 отключает эту проверку.
fail_timeout=30s - см. max_fails. По умолчанию 10 сек.
down - пометить сервер как нерабочий. Применяется в связке с ip_hash, чтобы не сломать распределение айпи по серверам.
backup - Применяется в связке основные сервера + резервные (например, в облаке с оплатой ресурсов), задействуются, когда нет серверов без этой опции - основные по max_fails временно отпали. Не может применяться с ip_hash.
Нет вменяемого механизма для логгирования переключений и отказов. Как костыль - задействовать log_module и потом парсить лог спец формата:
log_format timing '$remote_addr - $remote_user [$time_local] $request ' 'upstream_response_time $upstream_response_time ' 'msec $msec request_time $request_time'; log_format up_head '$remote_addr - $remote_user [$time_local] $request ' 'upstream_http_content_type $upstream_http_content_type';(c линка наверху)
Замечание про location / {
Дело в том, что нельзя просто сослаться на локейшн, но есть именованные "области" (error_page 404 = @fallback;) или можно попробовать через alias
location ~"..." {
alias /var/www/vhost$name; }
Но совсем красивого решения я пока не вижу, поэтому пока делается 2 секции на / и для всех ссылающихся частей и через include описывается единая система.
Комментариев нет:
Отправить комментарий