На бесплатном тарифе CloudFlare список кешируемых форматов файлов весьма ограничен.
Первый этап, это создания Page rule для вашего CDN поддомена в панели cloudflare.
Ниже пример правила для моего поддомена. Там хранится тяжелая статика (до 500Мб на файл)
Самая важная строчка, это Cache everything.
TTL каждый ставит на свой выбор. В моем же случае это статика, которая никогда не меняется.
После этого любой запрос с Вашего поддомена будет кешироваться.
Пример, в виде архива 7z более 400 Мб
И второй этап, это nginx.
В конфиг server {} для CDN необходимо добавить 2 строчки:
if ($args !~ ^$){
return 404;
}
if ($request ~* (^.*\?.*$)){
return 404;
}
Первый if — это защита от DDoS'а в стиле Google Spreadsheet, так как в случае с Cache everythingпри запросе archive.7z?ver=killemmall CloudFlare нехило просадит ваш канал (в случае если вы не задали кровожадных ограничений для CDN серверов).
Вот для этого в случае запросов файлов с аргументами ($args) и введено данное условие if.
Но и это еще не все!
Второй if: archive.7z?!=archive.7z (для любителей классики <>, «неравно!») в случае опции Cache everything в Page rules. И данный запрос легко проскакивает мимо первой проверки, так как $argsпуста! Казалось бы ничего страшного, что архив размером в 400 Мб будет запрошен повторно одинраз, от сервера не убудет.
На самом деле не один раз, а до 42 (сорока двух) раз.
Я запрашивал файл через сервера в разных странах и заметил, что файл был закеширован для страны#1, и при запросе из страны#2 он был закеширован по новой.
В саппорт был задан вопрос и получен ответ: «CloudFlare has 42 PoPs, so the static file could be requested 42 times.»
Соответственно файл с параметром "?" (Cache everything!) может быть запрошен еще 42 раза и сам файл еще 41 раз как минимум. Итого 83 запроса. Соответственно файл размером в 400 Мб превращается в максимально возможные 33Гб траффика за время вашего TTL и нагрузку на ваш канал со стороны CDN провайдера.
Вот чтобы не было дополнительных максимально возможных паразитных 42 запросов и введена вторая проверка.
Замечательный результат:
Что мы получаем:
+28 датацентров для нашего универсального CDN
+колоссальное снижение нагрузки на канал
+экономия траффика
Что мы теряем:
-возможность отдавать кешировать на CDN провайдере файлы более 512 Мб (ограничение бесплатного тарифа)
-файлы, запросы к которым содержат "?" (в этом случае регулярку во втором if надо переработать).
Получаем, но с оговорками:
+-Кеширование видеофайлов для раздачи. Проигрывать/раздавать файлы можно, но перематыватьнельзя.
CloudFlare, как и любой другой кеширующий и проксирующий CDN провайдер — это очень мощный инструмент, и чтобы «с этим инструментом» было лучше чем «без», необходимо его правильно использовать, даже если это и не описано в официальной документации. В противном случае вы рискуете получить негативный результат (интернет пестрит мнениями какой CDN плохой).
https://habr.com/post/245165/
Первый этап, это создания Page rule для вашего CDN поддомена в панели cloudflare.
Ниже пример правила для моего поддомена. Там хранится тяжелая статика (до 500Мб на файл)
Самая важная строчка, это Cache everything.
TTL каждый ставит на свой выбор. В моем же случае это статика, которая никогда не меняется.
После этого любой запрос с Вашего поддомена будет кешироваться.
Пример, в виде архива 7z более 400 Мб
И второй этап, это nginx.
В конфиг server {} для CDN необходимо добавить 2 строчки:
if ($args !~ ^$){
return 404;
}
if ($request ~* (^.*\?.*$)){
return 404;
}
Первый if — это защита от DDoS'а в стиле Google Spreadsheet, так как в случае с Cache everythingпри запросе archive.7z?ver=killemmall CloudFlare нехило просадит ваш канал (в случае если вы не задали кровожадных ограничений для CDN серверов).
Вот для этого в случае запросов файлов с аргументами ($args) и введено данное условие if.
Но и это еще не все!
Второй if: archive.7z?!=archive.7z (для любителей классики <>, «неравно!») в случае опции Cache everything в Page rules. И данный запрос легко проскакивает мимо первой проверки, так как $argsпуста! Казалось бы ничего страшного, что архив размером в 400 Мб будет запрошен повторно одинраз, от сервера не убудет.
На самом деле не один раз, а до 42 (сорока двух) раз.
Я запрашивал файл через сервера в разных странах и заметил, что файл был закеширован для страны#1, и при запросе из страны#2 он был закеширован по новой.
В саппорт был задан вопрос и получен ответ: «CloudFlare has 42 PoPs, so the static file could be requested 42 times.»
Соответственно файл с параметром "?" (Cache everything!) может быть запрошен еще 42 раза и сам файл еще 41 раз как минимум. Итого 83 запроса. Соответственно файл размером в 400 Мб превращается в максимально возможные 33Гб траффика за время вашего TTL и нагрузку на ваш канал со стороны CDN провайдера.
Вот чтобы не было дополнительных максимально возможных паразитных 42 запросов и введена вторая проверка.
Замечательный результат:
Что мы получаем:
+28 датацентров для нашего универсального CDN
+колоссальное снижение нагрузки на канал
+экономия траффика
Что мы теряем:
-возможность отдавать кешировать на CDN провайдере файлы более 512 Мб (ограничение бесплатного тарифа)
-файлы, запросы к которым содержат "?" (в этом случае регулярку во втором if надо переработать).
Получаем, но с оговорками:
+-Кеширование видеофайлов для раздачи. Проигрывать/раздавать файлы можно, но перематыватьнельзя.
CloudFlare, как и любой другой кеширующий и проксирующий CDN провайдер — это очень мощный инструмент, и чтобы «с этим инструментом» было лучше чем «без», необходимо его правильно использовать, даже если это и не описано в официальной документации. В противном случае вы рискуете получить негативный результат (интернет пестрит мнениями какой CDN плохой).
https://habr.com/post/245165/