Re: Nginx возвращает 499 при проксировании после нескольких часов работы

Maxim Dounin mdounin at mdounin.ru
Tue Jul 1 14:10:02 UTC 2014


Hello!

On Tue, Jul 01, 2014 at 05:30:03AM -0400, Andruxa wrote:

> Максим, спасибо за ответ!
> 
> Действительно, таймер был увеличен ранее специально, правда решали не совсем
> эту задачу. 
> На бэкенде обрабатывались продолжительные запросы, соединение держалось
> открытым, поэтому все таймауты были увеличены. Постепенно с этой проблемой
> разобрались, перевели долгие процессы в фон, соединение закрываем сразу, но
> видимо настройку не вернули обратно. 
> 
> Нагрузка на backend не большая по всем параметрам, да и запросов не так
> много. Используем для мониторинга munin. 
> 
> Сейчас не совсем понятно
> 1) в логах на backend'е нет запросов, которые на frontend'e помечены как
> 499
> Получается, что запрос либо не был отправлен, либо не дошел. 

Как я уже писал, из логов фронтенда очевидно, что не 
устанавливается соединение с бекендом.  Естественно, в логах 
бекенда его не будет.

Нужно смотреть что на бекенде с listen queue (BSD - "netstat 
-Lan", Linux - "ss -nlt"), и если всё хорошо - доходят ли туда 
вообще соответствующие SYN-пакеты.

> 2) после того, как проблема начинается проявлятся, она стабильно
> воспроизводится до тех пор, пока не перезагрузишь nginx
> 
> 3) Все запросы между frontend и backend ходят по http
> Обнаружили, что если запрашивать ресурс у frontend'a по http и он стабильно
> не возвращается, то при запросе по https он может вернуться
> 
> 4) Помимо 499 для части ресурсов возвращался статус 401
> Вот тут можно посмотреть дебаг лог
> https://www.dropbox.com/s/6xw5frcmrypzk8p/filtered_401_renamed.log
> При этом опять нет ничего в логах на backend'e. К слову на backend работает
> nginx 1.5.13
> И опять после перезапуска nginx'а на frontend все отдается как положено.

Про 401 не скажу, а судя по остальным симптомам, то если на 
бекенде nginx - я бы сказал, что у вас между фронтендом и бекендом 
statefull firewall, и у него кончаются state'ы.  Либо же кончаются 
локальные порты.  Если это так, то с listen queue на  бекенде будет 
всё хорошо, а SYN-пакеты - доходить не будут.

> Тут в логах есть вот такие строки
> readv: 1:3560                                           
> readv() not ready (11: Resource temporarily unavailable)
> Могут ли быть такие ошибки из проблем с соединением между frotned'ом и
> backend'ом?

Это не ошибки.

-- 
Maxim Dounin
http://nginx.org/



Подробная информация о списке рассылки nginx-ru