Как правильно установить nginx таймаутов в качестве прокси? - PullRequest
0 голосов
/ 06 мая 2020

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

2020/05/05 20:40:05 [error] 13425 # 0: * 1360447 recv () failed (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)

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

  • клиент:

    • тайм-аут запроса: 60 ​​с
  • балансировщик нагрузки:

    • тайм-аут keepalive: 60 с
  • nginx:

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

    • время ожидания запроса: 50 с
    • keepAliveTimeout: 65 с
    • голова ersTimeout: 70 с

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

То, что я уже проверил:

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

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

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

(я не уверен, не является ли это скорее вопросом ServerFault?)

...