Вы проверяли логи Nginx (или того, что вы используете)? Это боты и сканеры. Не обращайте внимания на IP-адреса — они меняются после нескольких попыток (IP-адреса в любом случае бесполезны, они всё равно постоянно меняются). Вам стоит начать использовать гео-блокировку (очень мало сайтов действительно глобальны) и блокировать множество user-agent на уровне сервера; по крайней мере, все совершенно ненужные и жадные SEO-скрейперы, боты, которые идентифицируют себя как IE5.x и т.д.
Как именно работает это ограничение скорости (нет, я не искал ответ). Оно срабатывает после определённого количества запросов за отрезок времени с одного IP?
В любом случае, когда возникает ситуация, похожая на DDoS, например, если URL упоминается в каком-то глупом списке, начинается поток запросов с IP из Китая, Пакистана, Ирана, Ирака, Вьетнама и России, плюс много с крупных VPS-сервисов, в основном из США, Франции и Германии. Когда они пытаются три раза и меняют IP, ограничение скорости не помогает особенно сильно.
В какой-то момент у меня было много глупых поисковых запросов. И много — это значит, что дроплет за 5 долларов от DigitalOcean упал, и у меня было почти ноль запросов от людей.
Это больше или меньше вопрос веб-сервера, а не Discourse. Эти «стучащие» должны быть остановлены до того, как попадут в приложение. Я знаю, что моя ситуация и решения гораздо проще, чем у OP или большинства веб-мастеров здесь, потому что я из Финляндии, и мой форум чисто финский — поэтому для меня возможно глобальное блокирование (хотя финны, живущие за пределами Финляндии, смотрят на это иначе ;))
Но независимо от ограничения скорости, по крайней мере, поддельные пользовательские агенты должны останавливаться сразу.
Как насчет SSH-стучащих? Они тоже потребляют ресурсы.
Если у вас проблемы с DDoS-атаками, я бы порекомендовал Cloudflare (что я делаю крайне редко). Убедитесь, что вы используете шаблон Cloudflare, а затем отключите оптимизации (или внимательно изучите их настройку).
Это не настоящий DDoS-атака. Но когда поступает много запросов одного типа, они действуют как DDoS, и результат тот же. Я использую Varnish, Fail2ban, а также гео-блокировку, и это помогает мне справляться с этой проблемой.
Сначала я подумал, что нас просто «забросали» ссылкой с Slashdot, но уже через 24 часа атаки продолжаются с прежней силой.
Быстрое временное решение — закрыть «фасад» и установить для сайта режим «требуется вход». Это сработало: загрузка процессора упала со 100% до 3% всего за 60 секунд.
Как только я снова открываю «фасад», страница /search мгновенно подвергается атаке бессмысленными запросами, например:
Это происходит в течение 60 секунд после повторного открытия сайта.
Мы — небольшая нишевая группа, не понимаю, зачем кто-то должен нас атаковать
Это лишь приблизительная оценка, но, согласно Google Analytics, у нас обычно 8–10 активных пользователей, а как только я снова открываю сайт для всех, это число за секунды взлетает до 1000+. Все подключения приходят из разных штатов США, все прямые, без рефереров.
Я оставлю сайт закрытым для членов сообщества на несколько дней, чтобы посмотреть, прекратится ли это, или попробую ограничить доступ к /search только для авторизованных пользователей. Если это не поможет, скорее всего, придётся подключить Cloudflare.
Я думаю, вы также можете посмотреть в /var/discourse/shared/log/var-log/nginx/.... (или что-то очень похожее). Есть и другие настройки, например slow down crawler user agents, если искать в настройках по слову «agent».
Все эти настройки помогают только в том случае, если бот соблюдает ограничения и рекомендации. Даже Googlebot не всегда это делает, а плохие боты — никогда. Вот одна из причин, почему файл robots.txt так бесполезен.
И дисклеймер: я не знаю, использует ли Discourse какие-либо другие технологии для замедления.
Нет, не отклонились. Потому что ваш вопрос был немного не по делу Вы хотели узнать одну мелкую деталь, тогда как следовало спросить: «что делать, если мой Discourse подвергся атаке ботов/DDoS».