Коллеги!
Столкнулся с необычной проблемой, не смог найти решение самостоятельно. Суть в том, что на Nuxt есть веб-сайт. js в сочетании с Laravel в качестве бэкэнда. При рендеринге на стороне сервера интерфейс отправляет запросы к бэкэнду через localhost. Во время DDoS-атак (есть защита от популярного сервиса), запросы go проходят в самом начале, в течение минуты защита «просыпается» и атака сходит на нет.
Проблема в том, что если атака имеет очень высокую пиковую нагрузку, затем происходит следующее.
- Сначала появляются ошибки при превышении количества открытых файлов:
ERROR EMFILE: too many open files, open '/*/*/*/app/client/static/img/image-1.svg'
ERROR EMFILE: too many open files, open '/*/*/*/app/client/static/img/image-2.png'
ERROR EMFILE: too many open files, open '/*/*/*/app/client/static/img/image-3.svg'
ERROR EMFILE: too many open files, open '/*/*/*/app/client/static/img/image-4.svg'
Папка клиента - это просто nuxt-приложение.
Когда защита отразит атаку, начинаются ошибки подключения к localhost:
ERROR getaddrinfo ENOTFOUND localhost localhost:80 at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26)
Интерфейс продолжает работать в обычном режиме, за исключением того, что во время рендеринга сервера данные не принимаются. Соответственно 90% функциональности отваливается. При перезапуске приложения nuxt работа полностью восстанавливается. В журналах nginx и php -fpm нет ошибок, указывающих на проблему с подключением к localhost.
Сразу скажу, что увеличение лимита на количество открытых файлов не является решением проблемы. проблема. При соответствующей силе атаки ошибка появится снова.
Я хочу понять причину, по которой локальный хост падает. Если вы не можете решить проблему в зародыше, альтернативой является то, как отловить такую ошибку в nuxt. js, чтобы инициировать перезапуск приложения?
Заранее спасибо!