Комбинация торнадо 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

Вот более подробная информация о директиве конфигурации:

http://wiki.nginx.org/HttpProxyModule

Другие вопросы по тегам