CloudFlare + nginx = кешируем всё на бесплатном плане


    В бесплатной версии Cloudflare все замечательно (ей-богу сказка!), но список кешируемых форматов файлов весьма ограничен.
    К счастью кеширование всего подряд (до 512 Мб на файл) можно настроить в одно два действия.



    Первый этап, это создания 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 плохой).

    Успехов вам и отличного аптайма!
    • +48
    • 49.2k
    • 6
    Share post

    Comments 6

      +3
      У CloudFlare есть опция Caching level, если выставить Simple, то на уровне CDN будет игнорировать строку параметров.
      +2
      И все было бы хорошо, если бы не Роскомадзор, который очень любит блокировать ресурсы CloudFlare.
        +1
        Я не рассматриваю этот CDN как «только для России», проекты для западной аудитории легко раскручиваются и монетизируются и если кто-то решит сделать проект для US и EU, то не встретит *почти никаких проблем.

        В случае с Роскомнадзором — наверное они что-нибудь поменяют или научатся банить не по IP. Хотя в данный момент я не получал уведомлений от пользователей из России, что какой-то файл недоступен или «разметка поехала» (я перешел на CF с ноября'14), наверное они прошлые баны убрали и/или CF использует другую подсеть. И, на мой взгляд, блокировать CDN провайдера это глупо.

        И, в случае политикой блокирования IP и подсетей CF — это как во фразе «зубов бояться..». Инструмент работает и приносит удовольствие через снижение нагрузки на канал и траффик.

        *какие «проблемы» может доставить CF на free плане, это тема для отдельной статьи. Актуальность — 2013 года и «западные» пользователи.
        0
        А что с платными тарифами?
        По их сайту нет никакой конкретики, может в курсе? Тоже ограничения на размер файла, что еще?
          0
          Сижу на бесплатном тарифе, по платные ничего сказать не могу. Использую только как CDN (то бишь IP ресурсов за ихними не прячу).
          На сайте Cloudflare есть раздел помощи. Там можете поискать ответы на уже заданные ранее другими пользователями вопросы.
          По сути, что я там нашел для себя касаемо лимитов: лимит на файл 512 Мб, лимит по расширениям (обходится примером в этой статье или апгрейдом на платный тариф). Лимитов по размеру кеша или траффику — нету информации.

          Но, прошу обратить внимание:
          SECTION 10: LIMITATION ON NON-HTML CACHING — они позиционируют себя как проксирующий и кеширующий сервис для html контента, и если соотношение html Vs. media не в пользу первого, то могут настучать (отключить от использования). Когда они это могут сделать?

          В 2013 году был прецедент: 103 Тб траффика за месяц + DDoS его ресурса (layer 7 — в статье). Автору сообщили, что он будет отключен, автор задал вопрос о переходе на бизней план (200 баксов), получил ответ, что на таком траффике (от 100Тб файлами) он может быть только на ентерпрайз (3000 баксов в месяц). После чего автор купил 2 сервера в leaseweb и стал раздавать с них.
          В его статье есть комментарии от Cloudflare, где ему предлагали перейти на бизнес план (!), что мол этот план для его траффика ддоса его ресурса подойдет, и спасет. Тут на лицо кривой менеджмент cloudflare начала 2013 года (об это описано в статье), который сам себе противоречит.

          В 2014 году я таких инцидентов не видел в сети. Какой я могу сделать вывод для себя: если использовать CF как CDN с длительным сроком хранения и на траффике 100Тб или около того, то надо покупать бизнес. Но оффициальных пруфов (на их сайте), как я написал выше, я не нашел, кроме «Advanced denial of service attack mitigation» через который фильтруют атаки 7 уровня, из-за которых Dominic Szablewski был отключен. Вы можете сформулировать Ваш вопрос в саппорт CF, а ответом поделится с нами:)
          Как-то так.

        Only users with full accounts can post comments. Log in, please.