Аватары, логотипы сайтов и ошибки сертификатов

Привет!

Я настроил серверы Discourse примерно в 5 экземплярах, и все они демонстрируют странное поведение. Не уверен, является ли это багом, или кто-то ещё сталкивался с подобным.

Шаги для воспроизведения

  • Настройка сервера проходит гладко.
  • Мастер настройки работает корректно, все изображения загружаются и отображаются как ожидалось.
  • Пользователь получает ссылку для регистрации, переходит по ней, и процесс регистрации проходит успешно.
  • (Именно здесь начинаются проблемы) Пользователь входит в систему, и все логотипы сайта отображаются неверно — показывается только текстовый заголовок.
  • Пользователь не может загрузить или назначить собственный аватар.
  • Сертификат сайта выдаёт ошибку о том, что соединение небезопасно.
  • По какой-то причине это влияет ТОЛЬКО на браузер, в котором была выполнена регистрация, и в Chrome частота сбоев значительно выше.

Устранение неполадок

  • Мы советовали пользователям очистить кэш и файлы cookie браузера — проблема сохраняется.
  • Мы просили пользователей переустановить браузеры (в основном Chrome) — проблема сохраняется.
  • Мы предлагали пользователям использовать другую учётную запись в Chrome или попробовать другой браузер (Safari, Firefox и т. д.) — всё работает!

Мы совершенно не понимаем, почему последний пункт помогает и почему исходная учётная запись, созданная при регистрации, оказывается повреждённой. Невозможно требовать от наших пользователей (около 600–700 человек) выходить из своей учётной записи Chrome и снова входить в неё, даже если это действительно решение проблемы.

Есть какие-то идеи?

С уважением,
Марк

Это стандартная установка на 30 минут? Или здесь есть какие-то кастомные настройки?

Вы включили force_https в настройках сайта, чтобы проверить, исправит ли это проблему?

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

Привет, Bahnu,

  • Стандартная установка занимает 30 минут
  • Никаких кастомных настроек
  • Параметр force_https не включён, но, как я уже говорил, эта проблема затрагивает только браузер, используемый для регистрации

Попробуйте включить force_https — я на 99% уверен, что это решит вашу проблему.

Хорошо. Все экземпляры установки получают свой сертификат от обратного прокси-сервера Nginx, который НЕ находится на той же машине. Будет ли force_https всё ещё иметь значение?

Так что это не стандартная установка. Вы говорили, что она стандартная.

Если Discourse находится за правильно настроенным обратным прокси, параметр force_https обязательно внесёт изменения. Эта настройка по сути указывает Discourse загружать все ресурсы и активы по протоколу HTTPS.

Ладно, извините.

Так, мы говорим о force_https в app.yml или в блоке конфигурации Nginx?

Я уже правильно передаю трафик, но не вижу этого свойства в YAML-файле.

Ни о том, ни о другом.

force_https — это настройка сайта, которую нужно включить в панели администратора.

Это может потенциально заблокировать меня?

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

Если вы не уверены в настройке обратного прокси, ознакомьтесь с этой конфигурацией и сравните её со своей:

Кстати, да. Заблокируйте меня. Включение force_https решило проблему с изображениями, НО сделало невозможным аутентификацию в браузерах с новой сессией. Существующая сессия работает нормально, но как только вы выходите из системы, вернуться обратно нельзя.

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

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

Единственное отличие моей конфигурации в том, что я не использую templates.yml.

Это потребует гораздо более глубокого расследования.

Хорошо. Странно. Я ничего не менял. Все изображения работают абсолютно нормально. Точка.

Тем не менее, при первоначальной установке ошибка недействительного сертификата возникает только в браузере/пользовательском интерфейсе.

Это может быть связано с кэшем браузера или некорректной конфигурацией сертификата. Вы использовали SSL от Let’s Encrypt или какой-то другой?

Это LetsEncrypt через Certbot. Сертификат в порядке. Думаю, это кэш браузера.

Попробуйте зарегистрироваться в режиме инкогнито. Ошибка всё ещё появляется?

И ещё один момент, который, как я предполагаю, вызывает подозрение. Вы используете какой-то внешний механизм аутентификации? (социальный вход, SSO и т. д.)

Нет. Внешняя авторизация не используется. Пробовал в режиме инкогнито. Безрезультатно. Тот же результат. Должно быть, дело в блоке сервера. Разберусь чуть позже.

Не могли бы вы поделиться ссылкой на одну из таких установок?

Вы основывали свою конфигурацию nginx на той, что указана здесь?

Убедитесь, что вы отправляете заголовок X-Forwarded-Proto.