Доброго времени суток. На сервере (debian) стоит nginx, за ним стоит apache. Вся статика передается непосредственно nginx-ом. Сервер часто атакуют, в основном это обычный http-флуд, который рубится nginx-ом с помощью limit_req и limit_conn, а особо активных скрипт (парсит логи ошибок nginx) банит по iptables. Долгое время я так успешно отбивался от небольших атак. Но вчера перед очередной атакой случилось следующее: apache перестал отвечать nginx-у. Сам nginx работал, успешно отдавал статику, но при попытке запросить страницу, генерирующуюся апачем, выдавал 502. В логах ошибок nginx по этому поводу были строчки:
connect() failed (111: Connection refused) while connecting to upstream
Пока апач лежал, я зашел по ssh, посмотрел статистику загруженности ресурсов - процессор простаивал, размер занятой оперативной памяти был не увеличен. Забанил один ip, с которого было больше всего коннектов (~40) и апач начал откликаться. После этого в лог апача посыпалось множество запросов тяжелой страницы с разных ip, штук по 30 в секунду. Это апач легко выдержал. Я не успел посмотреть tcpdump пока апач лежал, netstat же выдавал множество соединений между apache и nginx со статусом TIME_WAIT.
Если вкратце описать ситуацию: nginx работает, сервер не нагружен, но apache, стоящий за nginx-ом, почему-то ложится. Что это может быть и как от этого защититься?