@Astar0t

Механика работы proxy_connect_timeout?

Привет всем зашедшим, нужна помощь по заданию

Я в этом новичок и хочу разобраться.

Надо из данных примеров сделать доступную инструкцию, почему в первом и втором случае мы выбрали таймаут 60 сек, а в третьем 3 сек.

пример 1
мы обслуживаем вебсайт https://example.com, настроен nginx в режиме реверс прокси, nginx отправляет запросы на единственный бекенд server1

upstream example-upstream {
    server server1:80;
}

server {
        listen       192.0.2.1 ssl http2;
        server_name example.com;
        ssl_certificate      /etc/ssl/nginx_certs/manual/example.pem;
        ssl_certificate_key  /etc/ssl/nginx_certs/manual/example_key.pem;

      location / {
            proxy_set_header Host $http_host;
            proxy_connect_timeout 60s;
            proxy_pass      http://example-upstream;
      }
}


пример 2
мы обслуживаем вебсайт https://example.com, настроен nginx в режиме реверс прокси, nginx отправляет запросы на несколько бекендов server1, server2, server3, бекенды неравноправные, используется прилипание пользователя к бекенду

upstream example-upstream {
    server server1:80;
    server server2:80;
    server server3:80;
    sticky;
}

server {
        listen       192.0.2.1 ssl http2;
        server_name example.com;
        ssl_certificate      /etc/ssl/nginx_certs/manual/example.pem;
        ssl_certificate_key  /etc/ssl/nginx_certs/manual/example_key.pem;

      location / {
            proxy_set_header Host $http_host;
            proxy_connect_timeout 60s;
            proxy_pass      http://example-upstream;
      }
}


пример 3
мы обслуживаем вебсайт https://example.com, настроен nginx в режиме реверс прокси, nginx отправляет запросы на несколько равноправных бекендов server1, server2, server3

upstream example-upstream {
    server server1:80;
    server server2:80;
    server server3:80;
}

server {
        listen       192.0.2.1 ssl http2;
        server_name example.com;
        ssl_certificate      /etc/ssl/nginx_certs/manual/example.pem;
        ssl_certificate_key  /etc/ssl/nginx_certs/manual/example_key.pem;

      location / {
            proxy_set_header Host $http_host;
            proxy_connect_timeout 3s;
            proxy_pass      http://example-upstream;
      }
}
  • Вопрос задан
  • 3801 просмотр
Пригласить эксперта
Ответы на вопрос 2
60 мало, тем более 3
В прокси конект таймаут войдет и ответ сервера с той стороны, а следовательно и запрос в msyql
Если ответа не будет за это время то вы увидите ошибку, и nginx дропнит это обращение в 500
если же тянуть кота за ....
то 1 вариант и второй может сильно загрузить один из бэк в следствие чего 3 явно мало, а в последнем случае равномерно нагрузить бэки для таймаута намного тяжелее и есле сервер не ответил за 3, то перейти на следующий в следствие этого при переключение клиент не заметит просадки, поскольк3 это не 60
НО как я и говорил вы должны быть 100% уверены что за 60 и тем более 3 может выполнится тяжелый хит.
В вашем случае есть вариант не выполнения тяжелого запроса за 3 секунды и он как дурак побежит по серверам в надежде получить хоть что-то, в результате даст 3 тяжелых хита на сервера и сдохнет.
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
а что неясного?
используется прилипание пользователя к бекенду
написано же
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы