Я только что включил force_https на своей установке Discourse. Окончание HTTPS обрабатывается обратным прокси-сервером, расположенным перед ним. Включение force_https переключает большинство внутренних ссылок Discourse на https, но не те, которые относятся к уже существующим изображениям, а конкретно к фавиконкам и логотипу. Теперь при доступе к моему сайту по https возникает предупреждение о смешанном содержимом из-за включения изображений без https.
Ссылки можно сделать https, повторно загрузив изображения или выполнив SiteIconManager.ensure_optimized! из консоли Rails, так что, похоже, ссылка где-то кэшируется и не обновляется при изменении force_https.
Discourse должен обновлять ссылки на загруженные изображения (и, вероятно, все загрузки), когда переключается force_https. Или ещё лучше — не включать схему в эти ссылки, хотя я не знаю, возможно ли это.
Я собираю образы Docker (разделённые на web_only и data) с помощью репозитория discourse_docker и запускаю их в облаке Kubernetes за прокси, который обрабатывает завершение HTTPS. Контейнер Discourse слушает только порт 80, и я не включал шаблоны SSL и Let’s Encrypt в файле конфигурации контейнера. Похоже, что именно шаблон Let’s Encrypt устанавливает параметр force_https в true, поэтому в моей конфигурации он по умолчанию не был активирован.
Это проблема возникает даже в том случае, если прокси-сервер отправляет заголовок X-Forwarded-Proto и другие аналогичные заголовки.
Переключение настройки сайта force_https не обновит протокол в URL логотипа, пока не будет очищен кэш icon_manager. Вероятно, самое простое решение — добавить force_https в список отслеживаемых настроек для менеджера иконок.
Верно! При стандартной установке оно настраивается автоматически, поэтому я предположил, что это не стандартная установка.
Я почти уверен, что на сайте GKE, который я администрирую, это устанавливается через переменную окружения DISCOURSE_FORCE_HTTPS, и всё работает как ожидалось. Но я настраивал это довольно давно, так что могу что-то упускать.