Работа с правилами CloudFlare
Информация на этой странице находится в доработке. Информация может добавляться и изменяться.
#CloudFlare предоставляет мощный инструмент по работе с различными правилами, зависящими от запросов клиентов. Разберём составление этих правил и приведём несколько примеров.
Настройки правила
Правила работаю на, так называемом, Cloudflare Ruleset Engine и позволяют максимально гибко себя конфигурировать при помощи специальных полей, условий и переменных.
Каждое правило состоит из двух этапов:
- If… - если.
 - Then… - тогда.
 
Рассмотрим всё это дело подробнее…
If…
Этап “Если” означает условие, по которому будут фильтроваться клиенты. Этап состоит из поля, оператора сравнения и значения, которое будет участвовать в составленном условии.
Поля
Поля это переменные, значения которых вычисляются из запроса, инициируемого клиентом. Ниже приведён частичный список полей, которые доступны из графического интерфейса. Полный список полей находится в документации CloudFlare.
- AS Num 
ip.src.asnum.
16- или 32-разрядное целое число, представляющее номер автономной системы (AS), связанной с IP-адресом клиента. Это поле эквивалентно устаревшемуip.geoip.asnum. - Cookie 
http.cookie.
Файл cookie в строке. Пример:session=8521F670545D7865F79C3D7BEDC29CCE;-background=light. - Country 
ip.src.country.
Двухбуквенный код страны в формате ISO 3166-1 Alpha 2. Пример: GB. Это поле эквивалентно устаревшемуip.geoip.country. - Continent 
ip.src.continent.
Код континента, связанный с IP-адресом клиента. Это поле эквивалентно устаревшемуip.geoip.continent.AF- Africa.AN- Antarctica.AS- Asia.EU- Europe.NA- North America.OC- Oceania.SA- South America.T1- Tor network.
 - Hostname 
http.host.
Имя хоста. Пример:www.example.org. - IP Source Address 
ip.src.
IP-адрес клиента. Пример:93.184.216.34. - Referer 
http.referer.
Заголовок запроса HTTP Referer, который содержит адрес веб-страницы, с которой пришёл запрос. Пример:Referer: https://developer.example.org/en-US/docs/Web/JavaScript. - Request Method 
http.request.method.
Метод HTTP-запроса. Пример:GET. - SSL/HTTPS 
ssl.
Возвращаетtrue, когда используется зашифрованное соединение с клиентом. - URI Full 
http.request.full_uri.
Весь URI, полученный сервером. Пример:https://www.example.org/articles/index?section=539061&expand=comments. - URI 
http.request.uri.
Путь URI и строка запроса. Пример:/articles/index?section=539061&expand=comments. - URI Path 
http.request.uri.path.
Путь URI. Пример:/articles/index. - URI Query String 
http.request.uri.query.
Строка запроса без разделителя?. Пример:section=539061&expand=comments. - HTTP Version 
http.request.version.
Версия используемого протокола HTTP. Пример:HTTP/1.1илиHTTP/3. - User Agent 
http.user_agent.
User Agent клиента, строка, позволяющая идентифицировать клиентскую операционную систему и веб-браузер. Пример:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36. - X-Forward-For 
http.x_forwarded_for.
Заголовок X-Forwarded-For. Пример:203.0.113.195, 70.41.3.18. - Client Certificate Verified 
cf.tls_client_auth.cert_verified.
Возвращаетtrue, когда запрос предоставляет действительный сертификат клиента. 
Операторы
Операторы сравнения возвращают true, когда значение запроса клиента совпадает со значением в выражении. Подробнее в документации.
- equals 
eq- равно. - does not equal 
ne- не равно. - greater than 
gt- больше чем. - less than 
lt- меньше чем. - greater than or equal to 
ge- больше или равно. - less than or equal to 
le- меньше или равно. - is in 
in {}- значение находится в массиве. - is not in 
not <field> in {}- значение не находится в массиве. 
Then…
Этап “Тогда” подразумевает под собой действие, которое будет применено к отфильтрованному клиенту.
Тип поля URL
- Dynamic - в поле URL содержит динамические параметры (переменные полей) и их необходимо вычислять и обрабатывать.
 - Static - в поле URL содержится обычные статические параметры.
 
Коды статуса
- 301 (Moved Permanently).
Запрошенный ресурс был окончательно перемещён в URL, указанный в заголовкеLocation. Браузер в случае такого ответа перенаправляется на эту страницу, а поисковые системы обновляют свои ссылки на ресурс (говоря языком SEO, вес страницы переносится на новый URL-адрес). - 302 (Moved Temporarily).
Запрошенный ресурс был временно перемещён по адресу, указанному в заголовкеLocation. Получив такой ответ браузер перенаправляется на новую страницу, но поисковые системы не обновляют свои ссылки на ресурс (в жаргоне SEO говорят, что вес ссылки (link-juice) не меняется и не отправляется на новый URL-адрес). - 303 (See Other).
Перенаправление производится не на новый (только что загруженный) ресурс, а на другую страницу, например, страницу подтверждения или страницу с результатами загрузки. - 307 (Temporary Redirect).
Запрошенный ресурс был временно перемещён в URL-адрес, указанный в заголовкеLocation. Единственное различие между 307 и 302 состоит в том, что 307 гарантирует, что метод и тело не будут изменены при выполнении перенаправленного запроса. В случае с кодом 302 некоторые старые клиенты неправильно меняли метод наGET, из-за чего поведение запросов с методом отличным отGETи ответа с кодом 302 непредсказуемо, тогда как поведение в случае ответа с кодом 307 предсказуемо. Для запросовGETповедение идентично. - 308 (Permanent Redirect).
Запрошенный ресурс был окончательно перемещён в URL-адрес, указанный вLocation. Браузер перенаправляется на эту страницу, а поисковые системы обновляют свои ссылки на ресурс (в SEO-speak говорится, что link-juice отправляется на новый URL-адрес). Метод запроса и тело не будут изменены, тогда как 301 иногда может быть неправильно заменён наGETметод. 
В примерах я буду приводить шаблон, который вписывается в редактор выражения. Поэтому, можно не щёлкать по удобным кнопочкам, а сразу нажимать Edit expression и вписывать нужный шаблон.
Переадресация
Самый часто используемый тип правил, это правила по работе с переадресацией. Привожу несколько примеров. Их можно брать готовыми и вставлять в редактор выражения, не забыв отредактировать под себя некоторые входные параметры, например, название домена или адрес куда переадресовывать клиентов.
Примеры
Ниже я привёл примеры, которые позволяют реализовать наиболее популярные правила переадресации запросов.
Пути
Переадресация запроса с одного ресурса (или страницы) на другой ресурс (или страницу).
https://example.org/sub -> https://sub.example.org
When incoming requests match:
Then…
- Type: 
Dynamic - Status code: 
301 
URL:
Число в функции substring() - это количество символов в названии директории sub + 1 символ.
Порты
Переадресация в зависимости от запроса, пришедшего на определённый порт.
Страны
Переадресация в зависимости от страны клиента.