Проблема CloudFlare JS ломает мой SPA - PullRequest
0 голосов
/ 24 января 2019

У меня есть React на основе SPA, который размещен через S3 на одном поддоменеact.mydomain.com ... Он взаимодействует с PHP REST API, который размещен на VPS на другом поддомене api.mydomain.com.Api.mydomain.com находится за CloudFlare.Веб-приложение находится за CloudFront, так как оно находится на AWS.

У меня возникают проблемы с запросами бота напрямую к API, заполняющему мой VPS, и я хотел бы использовать функциональность JS challenge с CloudFlare для смягчения.

Однако, похоже, происходит то, что пользователи могут загрузить веб-приложение React (которое не стоит за CloudFlare).Затем запрос, который вызовет вызов JS, сразу же завершится неудачей с ответом 503, потому что это запрос AJAX и он несовместим с вызовом Javascript.

Я думал, что смогу справиться с этим, перехвативошибка и перенаправление.Однако, если я вручную заставлю свой собственный браузер перейти по URL-адресу api.mydomain.com, я увижу вызов CloudFlare и пройду его.Тем не менее, если я затем вернусь к моему SPA00000000.Ru, SPA-запросы не будут выполняться, потому что он не может прикрепить cookie-файл, который сообщает CloudFlare, что он прошел.

Я не понимаю, как настроить мою инфраструктурутак что я могу воспользоваться преимуществами JS.В настоящее время я ограничен использованием ограничения скорости, но обнаружил, что к тому времени, когда я становлюсь достаточно серьезным, я все еще пропускаю примерно 75% или более нежелательного трафика бота, чтобы пользователи начали жаловаться.

1 Ответ

0 голосов
/ 24 января 2019

У меня твоя проблема. Вам стоит взглянуть на AWS Egde Lambda . Вы можете достичь того, чего хотите, используя это.

По сути, AWS Lambda edge позволяет перехватывать и изменять каждый отдельный запрос / ответ, поступающий на ваш облачный веб-сайт. Вы можете создавать некоторые функции, используя nodejs, c #, python и т. Д., Для каждого отдельного запроса / ответа из вашего облачного фронта.

Как я понял, у вас в настоящее время есть защита в вашем API, но ваш сайт все еще загружается для всех, поэтому вы получаете ошибку 503 в вызовах ajax. Почему вы не используете эту защиту также на вашем сайте?

Может быть, не имеет смысла загружать контент вашего сайта, если Cloudflare не проверяет его, верно? Так что, если вы также внедрите эту облачную защиту на своем веб-сайте, размещенном в Cloudfront? Я почти уверен, что вы можете сделать это с помощью Lambda Egde, но для этого потребуется некоторое чтение и понимание лямбда-краевых событий и рабочего процесса.

Ознакомьтесь с Конструкция AWS Egde Lambda и Примеры функций AWS Edge Lambda

...