Full site CDN acceleration for Discourse

У меня есть вопрос, касающийся технологии CDN.

Правильно ли я понимаю, что CDN может кэшировать только файлы на моём сайте и не может кэшировать файлы, на которые есть прямые ссылки с другого сайта?

Я храню каталожные файлы (mps и изображения) на другом сервере и делаю на них прямые ссылки на своём сайте Discourse. Правильно ли я понимаю, что такие файлы не будут кэшироваться CDN? Есть ли способ кэшировать и файлы с прямыми ссылками?

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

Вы должны разместить этот сайт за CDN, а затем передать URL CDN в Discourse.

Если вы установите CDN перед вашим сайтом с изображениями, но передадите в Discourse URL источника, вы можете использовать встроенную функцию для замены URL источника на URL CDN.

2 лайка

Прав ли я, что если я активирую функцию CDN в Discourse и отключу сохранение оригиналов на сервере Discourse, то CDN-сервис закэширует эти внешние файлы, а Discourse заменит все ссылки на файлы, которые были напрямую подключены с другого сайта?

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

К сведению — я создал новую тему о настройке ускорения всего сайта через CDN (и завершения SSL) с использованием AWS CloudFront (ссылка ниже). Здесь есть свои сложности, поэтому действуйте осторожно.

1 лайк

Это всё ещё требуется, когда возникает ошибка Reason: CORS header ‘Access-Control-Allow-Origin’ missing?

Я не могу найти ничего, что использует эту переменную на GitHub:


Редактирование: в комментарии к настройкам всё ещё указано, что это необходимо, и после этого всё работает. Так что я просто приму это :slight_smile:

1 лайк

На данный момент, в 2023 году, всё ещё необходимо строго соблюдать четыре правила ниже? Например, если я использую Akamai, который предназначен для ускорения основного доменного имени с помощью CDN. Есть ли у кого-то упрощённая конфигурация этих правил? Например, должны ли message bus и long polling по-прежнему обращаться к исходному серверу? Где должны быть настроены эти параметры? Похоже, что настройка long polling base url удалена из панели администратора?

2 лайка

Существуют некоторые расширенные настройки, позволяющие обрабатывать запросы Message Bus с другого домена. Однако это довольно сложно.

1 лайк

Таким образом, «long polling base url» необходимо задать через консоль Rails, так как эта настройка была удалена из административной панели. Если для корректной работы сайта в режиме Full site CDN эта настройка всё ещё требуется, я, вероятно, упустил где-либо опубликованное ранее объяснение причин её удаления.

Аналогично, в файле app.yml должно быть установлено значение DISCOURSE_ENABLE_CORS: true.

Вы должны задать его с помощью переменной окружения (DISCOURSE_LONG_POLLING_BASE_URL) в вашем файле app.yml. Она скрыта, так как её нужно настраивать очень немногим, и предполагается, что если вы это делаете, то знаете, что делаете.

1 лайк

Спасибо, @pfaffman! Я должен был знать, что все эти переменные в верхнем регистре должны помещаться в app.yml.
Итак, в каких случаях применения message-bus вступят в силу? Например, ответ на пост, вызывающий уведомление и т.д.? Я проведу тестирование сценариев использования, чтобы убедиться, работает ли message-bus на моём сайте как ожидалось без установки DISCOURSE_LONG_POLLING_BASE_URL.

Привет!
Удалена ли «базовая URL-адресация long polling» из панели администратора? Или эту настройку можно выполнить через rails console?

long_polling_base_url — это скрытая настройка сайта, но её можно задать через консоль Rails, если вы не используете переменную окружения в вашем файле app.yml:

3 лайка

Этот список определённо даёт больше понимания о Discourse.
Я настроил CDN для своего сайта, и он достиг граничных кешей, однако проблема с message-bus в заголовках ответа не проявлялась, но всё равно это не кажется надёжным. Настройки CORS также не установлены.

Cache-Control: must-revalidate, private, max-age=0

Здравствуйте,
Я задал свой вопрос в другой теме: Full Site CDN Using AWS CloudFront - #2 by Hyan. Я выполнил ту же конфигурацию и оставил #DISCOURSE_CDN_URL: https://discourse-cdn.example.com без изменений. Могу ли я установить его в тот же URL, что и у сайта? Например, http://forum.example.com. В противном случае URL-адреса ресурсов будут указаны в относительном пути без доменного имени.
Буду признателен, если @sam или @pfaffman дадут подсказку.

Я не рекомендую использовать Cloudflare в качестве CDN. Некоторые так делают. Возможно, они могут помочь.

РЕДАКТИРОВАНИЕ: О, извините. Это «Полноценный CDN сайта…». Возможно, мне не стоит здесь участвовать.

Нет, я использую CDN Akamai, который поддерживает кэширование динамического контента.
Согласно первому сообщению в этой теме, похоже, мне следует настроить переменную DISCOURSE_CDN_URL так же, как при использовании CDN не для всего сайта, хотя URL совпадает с URL самого сайта. Я просто не уверен, не сломает ли это мой сайт и не приведёт ли к необратимым последствиям, в результате чего мне придётся переустанавливать программное обеспечение с нуля. В этом сообщении Full Site CDN Using AWS CloudFront автор не меняет значение DISCOURSE_CDN_URL, и для обслуживания message-bus/long-polling не требуется отдельный URL. Я использую это решение, и мой сайт работает стабильно. Единственный недостаток этого подхода заключается в том, что в исходном коде страницы много относительных URL (без базового URL, так как значение DISCOURSE_CDN_URL пустое), из-за чего сайт выглядит не как продукт уровня продакшена.

В продолжение моих вопросов я нашел похожий пост, о котором я спрашиваю здесь: CloudFront not caching static files - #4 by Falco

Благодарю за ответ от @Falco. В этой настройке Full site CDN можно ли задать DISCOURSE_CDN_URL таким же, как DISCOURSE_HOSTNAME? Я предполагаю, что Full site CDN означает ускорение URL хоста через CDN, что делает DISCOURSE_CDN_URL идентичным DISCOURSE_HOSTNAME. Однако здесь нет подходящей документации по этому вопросу на meta.

Привет, есть ли какой-нибудь шаблон для bunny?

Вам не нужен шаблон для этого. Просто настройте bunny на подтягивание данных с вашего сайта Discourse и установите значение DISCOURSE_CDN_URL в app.yml на CDN-эндпоинт, предоставленный bunny.

1 лайк

Я пробую это с использованием «ускорения CDN» с моим IP-адресом VPS и Bunny DNS. Это работает, но у всех пользователей один и тот же IP-адрес.

Я только что нашёл конфигурацию, она называется «X-Real-Ip».