Как правильно установить таймауты nginx в качестве прокси?

Я получаю несколько ошибок 502 в nginx:

2020/05/05 20:40:05 [ошибка] 13425 # 0: * 1360447 recv () не удалось (104: сброс соединения одноранговым узлом) при чтении заголовка ответа от восходящего потока, клиент: 172.31.12.13, сервер:, запрос: " POST /app/functionHTTP/1.1 ", восходящий поток:" http://127.0.0.1:8080/app/function ", хост:" example.com "

Архитектура:

client - load balancer - instances (each with nginx proxy for NodeJS http server)

Значения тайм-аута:

  • клиент:

    • request timeout: 60s
  • балансировщик нагрузки:

    • keepalive timeout: 60s
  • nginx:

    • http keepalive_timeout: 65s
    • upstream keepalive_timeout: 60 с
    • upstream keepalive: 256 подключений
    • proxy_connect_timeout: 60 с
    • proxy_read_timeout: 60 с
    • proxy_send_timeout: 60 с
  • сервер (NodeJS):

    • request timeout: 50s
    • keepAliveTimeout: 65 сек.
    • headersTimeout: 70 с

Ошибка 502 возникает редко (~ 0,01% запросов), но постоянно.

Что я проверил до сих пор:

  • Не достигнут предел файловых дескрипторов
  • Лимит подключений nginx не достигнут
  • Не достигнут предел TCP-портов
  • Предел ЦП, памяти, дискового ввода-вывода не достигнут

Это очень похоже на состояние гонки, когда сервер NodeJS закрыл соединение, а nginx предполагает, что соединение все еще существует.

Какими будут правильные значения тайм-аута nginx в текущих настройках?

(Я не уверен, что это скорее вопрос ServerFault?)


person Manuel    schedule 05.05.2020    source источник
comment
Я бы тоже хотел узнать ответ на это   -  person Kevin Danikowski    schedule 13.04.2021