Discourse и Cloudflare

В этом сообществе много споров об использовании Cloudflare. Кто-то говорит, что всё работает отлично и без проблем, а другие предупреждают, что мир рухнет, если его использовать. В любом случае, большая часть этой информации устарела: от двух лет до почти десятилетия.


Лично я использую Cloudflare с Discourse здесь в 2022 году без каких-либо проблем.

Я полностью минифицирую и кэширую все страницы, а также HTML/CSS/JS, используя сжатие Brotli. Единственное исключение — путь /admin, который я не пропускаю через оптимизацию Cloudflare, но это лишь моё личное предпочтение.

Я не отключал Rocket Loader, так как он по умолчанию уже был выключен. Единственное изменение, которое я внес, — добавил:

- "templates/cloudflare.template.yml"

в настройки app.yml, чтобы восстановить IP-адреса пользователей.

Также стоит упомянуть, что сайт работал отлично ещё до того, как я сделал какие-либо настройки.

Пока вы признаёте, что ваши действия полностью не поддерживаются, всё в порядке.

CloudFlare продолжает корректировать свои оптимизации: иногда они не вызывают проблем, а в других случаях могут полностью обрушить сайт. Для большинства пользователей идея о том, что их сайт сломается без каких-либо действий с их стороны, была бы крайне неприемлемой.

Если вы когда-либо наблюдали за процессом восстановления, то уже знаете, что минификация в Discourse уже происходит внутри системы. CloudFlare не минифицирует сайт лучше, чем это уже делает сам Discourse. Измеряли ли вы производительность с включённым и выключенным CloudFlare?

И не забывайте: как только JavaScript-приложение загружается в браузер, CloudFlare фактически замедляет ваш сайт. Каждый бит трафика между приложением и сервером теперь должен проходить через сеть CloudFlare, увеличивая количество сетевых переходов и, как следствие, задержку.

Но если у вас всё работает отлично — это прекрасно. Просто убедитесь, что вы отключаете CloudFlare перед тем, как запрашивать поддержку, поскольку это первый (и наиболее вероятный) виновник проблем.

У меня сложилось ощущение, что большинство (если не все) опасений по поводу использования Cloudflare с Discourse основаны на проблемах, возникших годы назад.

И Cloudflare, и Discourse за последнее десятилетие прошли долгий путь.

У меня есть обширный опыт работы с проблемами кэширования в целом. Действительно, в ранние годы Cloudflare часто нарушал работу скриптов, но уже много лет он ведёт себя вполне корректно.

Некоторые более агрессивные инструменты кэширования действительно ломают функционал и требуют значительной оптимизации, чтобы начать работать корректно. В целом это утверждение остаётся верным.

Однако уверены ли вы, что утверждение о том, что Cloudflare не поддерживается Discourse, всё ещё актуально? В самом Discourse буквально встроены механизмы для работы с Cloudflare.

В любом случае, нет, я не проводил сравнение «до и после» на https://gtmetrix.com/, но для меня это не так важно, поскольку у меня есть другие причины использовать Cloudflare, кроме просто скорости. Поэтому, если бы он не вызвал значительного (или даже заметного) снижения производительности, я бы всё равно использовал его.

Итоговая мысль: Да, при использовании любого инструмента CDN, кэширования, минификации и т. п., особенно если у вас мало опыта, могут возникнуть проблемы. Это справедливо для всех веб-сайтов, независимо от способа их разработки. Однако идея о том, что Cloudflare почти гарантированно приведёт к хаосу на всех сайтах Discourse, кажется устаревшей информацией, которую пора перестать распространять.

Шаблон CloudFlare не является новым дополнением. Если вы потратите время и посмотрите исходный код, то увидите, что его единственная цель — получить диапазоны IP-адресов Cloudflare и настроить nginx так, чтобы он использовал заголовок CF-Connecting-IP как истинный адрес клиента, поскольку проксирование «оранжевого облака» скрывает реальный адрес. Это не новинка, эта функция существует уже как минимум семь лет. Вы можете использовать Cloudflare, чтобы скрыть местоположение вашего сервера, или применять его в качестве дешёвого CDN для файлов загрузки, но в обоих случаях мы рекомендуем отключить все функции повышения производительности и использовать правило страницы для включения кэширования в папке с загрузками.

Какую пользу может продемонстрировать тестирование через GTMetrix? Мне кажется, что вы фундаментально не понимаете, как работает Discourse, раз ссылаетесь на этот инструмент. Discourse — это не просто веб-сайт, это JavaScript-приложение. При навигации по сайту браузеру не отдаются статические HTML-страницы. JavaScript-приложение, которое загружается в ваш браузер, напрямую общается с сервером, поэтому некоторые элементы страницы, казалось бы, не перезагружаются между кликами. Отзывчивость этого приложения определяется только ресурсами сервера и задержкой между клиентом и сервером. Cloudflare не может ускорить ваш экземпляр Discourse, а его присутствие между двумя системами увеличивает задержку.

Вышеизложенное основано на многолетнем опыте, а не на ощущениях. В Discourse до сих пор периодически возникают проблемы с Cloudflare. Помимо скрытия IP-адреса вашего сервера и экономии небольшого объёма трафика при загрузке файлов, Cloudflare не может сделать ничего, чтобы ускорить сайт на базе Discourse.

Шаблон CloudFlare — это не нововведение, и если вы потратите время на изучение исходного кода, то увидите, что его единственная цель — получить диапазоны IP-адресов CloudFlare и изменить конфигурацию nginx, чтобы он использовал заголовок CF-Connecting-IP как настоящий адрес клиента, поскольку проксирование «оранжевого облака» скрывает реальный IP. Это не что-то новое; такая практика существует уже как минимум семь лет. Вы можете использовать Cloudflare для сокрытия местоположения вашего сервера или в качестве дешёвого CDN для загрузок, но в обоих случаях мы рекомендуем отключить все функции производительности и настроить правило страницы (page rule), чтобы включить кэширование для папки с загрузками.

Верно, мой тезис заключался в том, что если бы Cloudflare не поддерживался, они бы даже не стали официально добавлять какую-либо поддержку для него. Также у них не было бы официальных руководств по его использованию. Конечно, в некоторых случаях они могут рекомендовать не использовать его по причинам X, Y и Z, но это не то же самое, что полная неподдержка. :skull_and_crossbones:

Какую пользу продемонстрирует тестирование через GTMetrix? Мне кажется, у вас фундаментальное непонимание того, как работает Discourse, раз вы ссылаетесь на этот инструмент. Discourse — это не веб-сайт, это JavaScript-приложение. Переход по сайту не отдаёт браузеру статические HTML-страницы. JavaScript-приложение, загружаемое в ваш браузер, напрямую общается с сервером, поэтому некоторые элементы страницы, кажется, не перезагружаются при кликах. Быстродействие этого приложения определяется исключительно ресурсами сервера и задержкой между клиентом и сервером. Cloudflare не может ускорить ваш экземпляр Discourse, а его присутствие между двумя системами лишь увеличивает задержку.

Да, я понимаю, что Discourse — это не просто веб-сайт. Это платформа для доставки контента, как и любая другая платформа/ПО/CMS. Конечно, Cloudflare не может повлиять на что-либо на уровне сервера, особенно в настройках LAMP. Но в конечном счёте любая платформа должна в итоге доставить весь клиентский код (HTML/CSS/JS). Конечно, GTmetrix не может сканировать скорость на стороне сервера, но всё же можно получить представление о финальном результате вашей настройки. Иными словами, о том, как пользователь воспринимает загрузку контента.

Cloudflare на самом деле не так уж сильно ускоряет веб-сайт, далеко не так драматично, как оптимизации на стороне сервера и улучшение ресурсов сервера. В этом мы полностью согласны. Его основное внимание сосредоточено на оптимизации DNS. Для платных аккаунтов есть более продвинутые функции CDN, особенно когда речь идёт об изображениях, но я даже не пользовался платным аккаунтом. Интересно, не в этих ли продвинутых функциях люди чаще всего сталкиваются с проблемами и вынуждены просить о помощи?

Вышеизложенное основано на многолетнем опыте, а не на ощущениях. В Discourse периодически возникают проблемы с Cloudflare. Помимо сокрытия IP-адреса вашего сервера и небольшой экономии трафика при загрузке файлов, Cloudflare ничего не может сделать для ускорения сайта на Discourse.

Чёрт возьми. Я знал, что за слово «ощущения» меня начнут подкалывать, но это просто фигура речи. Я тоже говорю исходя из опыта. :stuck_out_tongue_closed_eyes:

Я не оспариваю тот факт, что как лидер в официальном сообществе Discourse вы, очевидно, обладаете большим опытом работы с Discourse и видели самые разные странные проблемы, вызванные Cloudflare.

Отложив в сторону все нюансы взаимодействия Cloudflare и Discourse, я всё же остаюсь при своём основном мнении: Cloudflare вовсе не так страшен, как это пытается внушить нарратив этого форума большинству людей.

Тем не менее, я также понимаю управление сообществами и то, что не все являются разработчиками или даже технически подкованными людьми. В этом смысле я понимаю, почему наводнение пользователями, считающими, что Discourse сломан, хотя на самом деле проблема в Cloudflare или чём-то подобном, может стать раздражающим.

В этом и суть. «Не поддерживается» не означает «невозможно», а скорее «удачи вам». Один из частых ответов на вопрос «есть ошибка» — «проходит ли она, если отключить Cloudflare»?

Если вы всё же хотите ускорить работу, используйте настоящую CDN — Включите CDN для вашего Discourse

Или, знаете, если кто-то хочет полностью бесплатный вариант или просто предпочитает использовать Cloudflare, они могут это сделать, без проблем.

Вы ссылаетесь на рекомендацию почти десятилетней давности. Вещи меняются. Мне бы очень хотелось увидеть комментарий одного из официальных разработчиков по этому вопросу в 2022 году. Я предполагаю, что он сказал бы, что ситуация стала гораздо стабильнее, и что любая рекомендация не возиться с JS, вероятно, относится ко всем CDN, а не только к Cloudflare.

Пожалуйста, не отмечайте участников команды. Если они захотят высказаться, они это сделают.

???

Я отметил создателя Discourse. Мы можем целый день спорить о том, как обстоят дела у Discourse в 2022 году в отношении Cloudflare, но пока мы не услышим это из первых уст, это будет скорее спекуляция, чем окончательный ответ.

Как он вообще мог бы узнать, что кто-то просит его мнения, чтобы высказаться, если бы его не отметили?

На прошлой неделе возникла проблема, связанная с тем, что пользователи видели рекламу, когда не должны были. Было вполне очевидно, что дело в Cloudflare. Отключение — это всегда один из первых шагов. Многие люди, получающие поддержку здесь, — полные новички, и наша цель — сделать всё максимально беспроблемным. Если у вас всё работает — это отлично. Если вы хотите отвечать на двадцать и более постов в неделю, которые

Но это не так. Если вы используете настоящий CDN, пользователи Discourse применяют его только для того, что должно обслуживаться через CDN.

Привет, @JammyDodger, думаю, пришло время создать FAQ по Cloudflare (хотя я уже не первый раз это предлагаю). Вы можете попросить Джеффа и Сэма высказать своё мнение.

Дело в том, что кэширование, объединение и минификация печально известны тем, что ломают JavaScript, независимо от используемого программного обеспечения или комбинации CDN. Я сталкивался с этой распространенной проблемой с десятками других инструментов и сервисов. При работе с новичками даже их собственный кэш браузера становится постоянной головной болью, которую приходится объяснять. Я управлял крупными сообществами разработчиков и хорошо знаю, как одна и та же проблема возникает снова и снова.

Меня интересует вот что: это действительно проблема именно Cloudflare или же это общая проблема всех инструментов оптимизации, которые могут ломать JavaScript, и просто из-за популярности Cloudflare эту общую проблему ошибочно приписывают именно ей? Понятна ли эта разница?

В любом случае, да, я бы хотел, чтобы официальные разработчики высказались по этому вопросу, и актуальный раздел FAQ был бы очень полезен. Я получаю много отпорков, но не пытаюсь создавать проблемы. Просто раздражает, что в сообществе столько противоречий по этому вопросу; я просто пытаюсь разобраться, как обстоят дела на самом деле в 2022 году.

Но если я не смогу, если мы не сможем — это нормально. Хорошего остального вам всем выходного. Я больше не буду беспокоить этого бедного :horse:.

Нет, это не так. Мы очень часто сталкиваемся с проблемами при использовании Cloudflare в сочетании с Discourse.

Понятия «поддержки» в данном случае не существует. Но если вы не знаете, что делаете, это может и приведёт к проблемам. Даже если вы знаете, что делаете, могут возникнуть неожиданные сложности.

Преимущества в производительности от использования Cloudflare, если они вообще есть, будут незначительными. Большинство ресурсов, предоставляемых Discourse, хорошо сжаты и неизменны (то есть кэшируются браузером в течение очень длительного времени). Остальной контент не подлежит кэшированию, так как представляет собой персонализированные данные приложения.

Тем не менее, Cloudflare может быть очень полезен для защиты от DDoS-атак.

Это было бы очень кстати, так как у разных пользователей сложилось разное мнение :person_shrugging:

У нас есть раздел FAQ по Cloudflare и тому, как (не) настраивать его для Discourse. Это также применимо к саморазмещённым экземплярам.

Я не сомневаюсь в этом, но, думаю, вы упустили суть того различия, к которому я пытался прийти. Дело действительно конкретно в Cloudflare, или же проблема в том, что инструменты оптимизации такого рода могут легко сломать JavaScript вообще? А большинство людей просто используют Cloudflare из-за его популярности, что создаёт ложное смешение понятий.

Это всё равно что винить Gmail или GoDaddy в проблемах, которые присущи всем почтовым или хостинг-сервисам.

И если бы существовал другой CDN, более популярный, чем Cloudflare, вы бы увидели ровно столько же странных запросов в поддержку и об этом сервисе.

Даже если вы не согласны, вы понимаете, о чём я?

Поскольку мы должны избегать определённых настроек, а пользователи на meta писали, например:

Всё, что Cloudflare может для вас сделать, — это скрыть ваш IP-адрес и выступать в роли CDN для ваших загрузок. Преимущества минимальны.

и

Преимущества Cloudflare в плане производительности, если они вообще есть, будут незначительными.

Есть ли однозначный и простой ответ на вопрос: «Если не включены настройки скорости, есть ли у Cloudflare какие-либо преимущества по сравнению с Bunny CDN или Stackpath (или любым «обычным» CDN, я так понимаю)»?

Я всё ещё колеблюсь между Bunny, который значительно снизил бы мои текущие расходы на CDN (Stackpath), и Cloudflare, который в моём случае был бы бесплатным (владелец домена может добавить мой форум в свой корпоративный аккаунт).

Также есть вещи, которые я не понимаю, потому что я не разбираюсь в технологиях.

Дело не только в поломке JS. Также речь идёт о проксировании и блокировке доступа к порту 80, сбое в работе LetsEncrypt, а также о том, что некоторые из этих сервисов кэшируют больше, чем следует.

Поскольку Cloudflare — крупнейший из таких «инструментов оптимизации», широко распространённый, популярный и бесплатный, именно вокруг него сосредоточено большинство обсуждений. Но да, вы правы: это проблема инструментов такого рода вообще.

Так что да, согласен.

Подобные темы по своей природе немного опасны, поскольку люди (особенно из целевой группы «проблемных») не склонны хорошо читать. Это как написать в теме об опасностях наркотиков или алкоголя и заявить: «Нет, ребята, проблема не только в наркотиках и алкоголе, я употребляю наркотики без каких-либо проблем, и не забывайте, люди: чрезмерное употребление любого вещества опасно». (Да, я знаю: любая метафора имеет свои пределы, но лучшего я придумать не мог).

И мы можем сколько угодно громко говорить об опасности этих вещей, но люди всё равно будут ими пользоваться.
Вот почему мы создали раздел FAQ :wink:

Новое руководство по часто задаваемым вопросам звучит как отличная идея. Ссылка на Communiteq была не очень надежной.

Здесь, на этом форуме, некоторые люди устанавливают общие правила Cache Level: Bypass, Disable Performance, однако при этом разрешают Cloudflare кэшировать изображения или CSS. Я не видел официального ответа, является ли это хорошим или плохим решением…

Вместо того чтобы говорить «не используйте Cloudflare», а затем разбираться с проблемными случаями, возможно, было бы лучше четко обозначить, что следует и чего не следует делать. Тогда быстрая ссылка на этот пост в будущем сможет ответить на эти вопросы.

Просто мнение одного человека.

@RGJ — Спасибо! Многие люди могут не увидеть или не понять сути моего различия или того, какую разницу это вносит, но для меня это приносит огромную ясность. Я очень расстраиваюсь без ясности, потому что без этого первоначального, прочного фундамента я не знаю, каким путём идти, чтобы глубже сфокусироваться и лучше понять конкретную тему.

Если у вас есть конкретные замечания, я буду рад их услышать.

Что касается кэширования, я бы сказал, что это не «за» или «против», а скорее «так себе»: