Запросы небезопасных шрифтов

Смешанный контент: страница по адресу '<URL>' была загружена через HTTPS, но запросила небезопасный шрифт '<URL>'. Этот запрос был заблокирован; контент должен обслуживаться через HTTPS

И 40 запросов к шрифтам из gem discourse-fonts. Это свежая установка, где Postgres и Redis работают на отдельном сервере в локальной сети, соединение осуществляется через сокет, но для внешнего доступа предоставляется через HTTPS. Существуют похожие темы, но я не нашёл чёткого ответа. Проверка CSS указывает на wizard.scss (с исходной картой). Есть какие-либо идеи?

Вы включили настройку force https?

Скорее всего, нет. Где я могу это настроить? И почему это вообще должно быть необходимо, если CSS может запрашивать статические ресурсы по HTTPS или использовать относительные ссылки?

Кстати — на внешнем веб-сервере у меня уже настроен типичный редирект 301.

Редактирование:

Нашёл настройку на основе этого поста, спасибо @Arkshine

Непонятно, почему у вас где-то есть http-ссылка; в любом случае должно принудительно использоваться https.

Вы можете найти это в строке поиска:

Ну, мне тоже. Я ничего не изменял. Просто обычная команда launcher build app. Эти URL-адреса, похоже, находятся в обработанном CSS, который я, очевидно, не трогал (как и scss) ни в каком виде. В файле app.yml я тоже ничего связанного с https не нашёл, так что… не знаю. Настройка force_https, кажется, обходит эту проблему.

FORCE_HTTPS указывает Discourse переписывать запросы.

Это необходимо даже в том случае, если вы выполняете инкапсуляцию SSL за пределами контейнера, чтобы избежать описанной вами проблемы.

Это зависит от того, как мы определяем «необходимость». На данный момент может потребоваться обходное решение реальной проблемы, а именно того, что скомпилированные CSS-файлы явно ссылаются на статические ресурсы, используя схему http. Но, на мой взгляд, в долгосрочной перспективе это не должно быть необходимо.

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

Итак, какие факторы/условия влияют на протокол URL ресурсов (JS/CSS) — HTTP или HTTPS?

  1. Если вы закомментируете строки ниже и получите доступ к сайту по HTTP, то URL ресурсов также будет HTTP:
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

В этом случае, если вы включите force_https, то при обращении к домену, на котором не установлен сертификат, все URL ресурсов вызовут ошибку R_SSL_PROTOCOL_ERROR. Чтобы избежать этого, установите сертификат для данного домена, чтобы решить проблему с протоколом SSL.

  1. Если же вы установите Discourse с раскомментированными выше шаблонами, то URL ресурсов сайта будет использовать HTTPS, как и базовый URL сайта. Кроме того, опция force_https станет невидимой в интерфейсе администратора.

Как упоминалось в оригинальном посте, в моём случае сертификат и всё остальное корректны и действительны, но все подключения к внешнему миру обрабатываются обратным прокси-сервером (nginx, естественно ;-), в то время как подключение к Discourse осуществляется через unix-сокет. Это означает, что у меня используется
templates/web.socketed.template.yml
вместо любого из упомянутых вами. Тем не менее, это не должно приводить к тому, что статические URL будут содержать жёстко заданную схему http:.