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