Как добавить 'upstream try' к запросу, который я отправляю на внутренний сервер - PullRequest
0 голосов
/ 09 октября 2018

У меня есть сервер nginx, который действует как балансировщик нагрузки.

nginx настроен на 3 попытки апстрима: proxy_next_upstream_tries 3

Я ищу способ перейти на бэкэндсервер текущий номер попытки этого запроса - т.е. первый, второй или последний.

Я полагаю, что это может быть сделано путем передачи этих данных в заголовок, однако, как я могу настроить это в nginx и где я могу взятьэти данные от?

Спасибо

1 Ответ

0 голосов
/ 15 октября 2018

Я отправил этот вопрос в службу поддержки Nginx, и они предоставили мне следующее объяснение:

Пока вы используете механизм proxy_next_upstream для повторных попыток, то, что вы пытаетесь сделать, невозможно.Запрос, который отправляется на следующие серверы, полностью идентичен запросу, отправляемому на первый сервер, который пытается nginx, или, точнее, это тот же запрос, который создается один раз, а затем отправляется на другие вышестоящие серверы по мере необходимости.Если вы хотите узнать на бэкэнде, обрабатывает ли он первый запрос или обрабатывает запрос на повторную попытку после ошибки, рабочим вариантом было бы отключить proxy_next_upstream и вместо этого повторить запросы на ошибки 502/504 с помощью директивы error_page.
См. http://nginx.org/r/error_page для примеров использования error_page.

Итак, я сделал так, как мне посоветовали:

proxy_intercept_errors on;

location / {
     proxy_pass http://example.com;
     proxy_set_header NlbRetriesCount 0;
     error_page 502 404 @fallback;
}

location @fallback {
     proxy_pass http://example.com;
     proxy_set_header NlbRetriesCount 1;
}
...