Комбинация торнадо Nginx, приводящая к 502 ошибкам шлюза
Мы столкнулись с проблемой несовместимых ошибок 502, и выявление причин было очень неприятным занятием. Мы можем воспроизвести проблему, отправив несколько одновременных запросов. Проблема в том, что некоторые из них находятся в диапазоне от 10 до 20 в течение 5 секунд (не опечатка). Поэтому ясно, что этот тип нагрузки должен быть легко обработан.
Нам действительно нравится подход Nginx + Tornado, но мы рассматриваем возможность перехода к более традиционному (например, многопоточному) подходу, поскольку эту проблему очень трудно решить. Мне было интересно, если вы а) знаете, как решить эту проблему и б) как мы можем выследить виновника (ей).
Файлы журнала просто указывают, что в соединении отказано. У нас та же проблема, что и в этом посте: https://stackoverflow.com/questions/2962439/how-do-i-debug-a-http-502-error
Но пока нет ответа на вопрос, как решить проблему, поэтому я надеюсь, что вы можете помочь, потому что это может быть распространенной проблемой для этого типа установки.
Заранее спасибо,
Павел
1 ответ
По умолчанию nginx не настроен для повторных подключений к другому восходящему потоку, если один из них отправляет обратно ошибку 502. Вам в основном нужно добавить это:
proxy_next_upstream error timeout http_502;
Для вашей конфигурации. Это предотвратит прямую отправку ошибок 502 обратно клиенту и вместо этого заставит nginx попытаться найти лучший восходящий поток. Это попытается все восходящие потоки перед возвратом к клиенту согласно этому посту:
http://forum.nginx.org/read.php?2,152071,152212
Вот более подробная информация о директиве конфигурации: