@iamkinghere

Как исправить ошибку «getaddrinfo ENOTFOUND localhost» в nuxt.js после DDoS?

Приветствую, коллеги!

Столкнулся с необычной проблемой, самостоятельно найти решение так и не получилось. Суть в следующем: есть веб-сайт на Nuxt.js в связке с Laravel в качестве бекенда. При серверном рендеринге фронтенд посылает запросы к бекенду через localhost. При DDoS-атаках (есть защита от популярного сервиса) в самом начале запросы проходят, в течение минуты защита "просыпается" и атака сходит на нет.

Проблема в том, что если у атаки очень высокая пиковая нагрузка, то происходит следующее.
1. Сначала появляются ошибки превышения количества открытых файлов:
ERROR  EMFILE: too many open files, open '/*/*/www/app/client/static/img/image-1.svg'
ERROR  EMFILE: too many open files, open '/*/*/www/app/client/static/img/image-2.png'
ERROR  EMFILE: too many open files, open '/*/*/www/app/client/static/img/image-3.svg'
ERROR  EMFILE: too many open files, open '/*/*/www/app/client/static/img/image-4.svg'

Папка client как раз и есть nuxt-приложение.

2. Когда защита отбивает атаку, начинаются ошибки подключения к localhost:
ERROR  getaddrinfo ENOTFOUND localhost localhost:80 at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26)


Фронтенд продолжает работать как обычно за исключением того момента, что отсутствуют любые данные, получаемые во время серверного рендеринга. Соответственно, отваливается 90% функционала. При перезагрузке nuxt-приложения работа полностью восстанавливается. В логах nginx и php-fpm отсутствуют какие-либо ошибки, указывающие на проблему подключения к localhost.

Сразу скажу, увеличение значения лимитов на кол-во открытых файлов - не решение проблемы. При соответствующей силе атаки ошибка появится опять.

Хочу понять причину, по которой отваливается localhost. Если не получится решить проблему на корню, альтернативный вариант - как поймать такую ошибку в nuxt.js, чтобы инициализировать перезагрузку приложения?

Заранее спасибо!
  • Вопрос задан
  • 1230 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы