Изменение force_https не обновляет URL загруженных изображений, что приводит к предупреждению о смешанном содержимом

Я только что включил force_https на своей установке Discourse. Окончание HTTPS обрабатывается обратным прокси-сервером, расположенным перед ним. Включение force_https переключает большинство внутренних ссылок Discourse на https, но не те, которые относятся к уже существующим изображениям, а конкретно к фавиконкам и логотипу. Теперь при доступе к моему сайту по https возникает предупреждение о смешанном содержимом из-за включения изображений без https.

Ссылки можно сделать https, повторно загрузив изображения или выполнив SiteIconManager.ensure_optimized! из консоли Rails, так что, похоже, ссылка где-то кэшируется и не обновляется при изменении force_https.

Discourse должен обновлять ссылки на загруженные изображения (и, вероятно, все загрузки), когда переключается force_https. Или ещё лучше — не включать схему в эти ссылки, хотя я не знаю, возможно ли это.

2 лайка

Как вы установили? Force_https включен по умолчанию уже довольно давно.

3 лайка

Я собираю образы Docker (разделённые на web_only и data) с помощью репозитория discourse_docker и запускаю их в облаке Kubernetes за прокси, который обрабатывает завершение HTTPS. Контейнер Discourse слушает только порт 80, и я не включал шаблоны SSL и Let’s Encrypt в файле конфигурации контейнера. Похоже, что именно шаблон Let’s Encrypt устанавливает параметр force_https в true, поэтому в моей конфигурации он по умолчанию не был активирован.

Не совсем так: оно включается при создании, но настройка сайта по умолчанию — false.

Также я видел, как люди отключали настройку сайта при попытке устранить неполадки, потому что она отображается как «изменённая» настройка.

2 лайка

Убедитесь, что ваш прокси отправляет все необходимые заголовки, указанные в конфигурациях nginx здесь:

В частности, заголовок X-Forwarded-Proto часто не включается по умолчанию.

3 лайка

Это проблема возникает даже в том случае, если прокси-сервер отправляет заголовок X-Forwarded-Proto и другие аналогичные заголовки.

Переключение настройки сайта force_https не обновит протокол в URL логотипа, пока не будет очищен кэш icon_manager. Вероятно, самое простое решение — добавить force_https в список отслеживаемых настроек для менеджера иконок.

6 лайков

Верно! При стандартной установке оно настраивается автоматически, поэтому я предположил, что это не стандартная установка.

Я почти уверен, что на сайте GKE, который я администрирую, это устанавливается через переменную окружения DISCOURSE_FORCE_HTTPS, и всё работает как ожидалось. Но я настраивал это довольно давно, так что могу что-то упускать.

5 лайков

Я проверил эту настройку «принудительный HTTPS» и снова включил её. У меня это сработало.

1 лайк