Ранее мы использовали настройку Discourse для нескольких сайтов с примерно 22 различными форумами. Недавно мы решили отказаться от конфигурации нескольких сайтов и оставить только сайт по умолчанию:
Сайт по умолчанию теперь:forum.mamapedia.com Удален старый домен для нескольких сайтов:forum.employ.com (и еще 21 домен)
Проблема:
Даже после отключения настройки для нескольких сайтов старые домены все еще могут обслуживать форум по умолчанию (forum.mamapedia.com). Например:
Переход на forum.mamapedia.com работает как ожидалось
Но при переходе на forum.employ.com все еще загружается форум Mamapedia
Мы ожидали, что старые домены, такие как forum.employ.com, будут либо:
Показывать ошибку (поскольку они больше не настроены)
Корректно перенаправлять или быть полностью неактивными
Примечания по настройке:
Мы используем SSL-сертификаты Cloudflare с включенной опцией прокси (трафик не идет напрямую на наш сервер).
Мы можем удалить A-записи для старых доменов, но нам действительно нужно выявить и устранить коренную причину, а не полагаться на обходное решение на уровне DNS.
Выполненные шаги:
Удалили настройки для нескольких сайтов из discourse.conf и базы данных
Перезапустили Discourse и проверили настройки в app.yml
Очистили кэш и протестировали в режиме инкогнито
Ожидаемое поведение:
forum.mamapedia.com должен продолжать работать
forum.employ.com и другие старые домены не должны обслуживать форум Mamapedia
Вопросы:
Как правильно удалить старые домены, чтобы они не обслуживали форум по умолчанию?
Нужно ли нам изменить настройки Nginx/Traefik, Cloudflare или есть какая-то специфичная для Discourse конфигурация, которую мы упустили?
Вам необходимо переключиться на стандартную установку. Все, что вы делали для настройки мультисайта, было направлено на то, чтобы сервер мог обслуживать множество доменов.
Если вы создадите новый сервер и восстановите резервную копию, вы ничего не сломаете, так как сможете просто вернуться к старому серверу.
Единственная сложность заключается в том, что вам нужно перенаправить DNS на новый сервер во время восстановления, чтобы он мог получить сертификат. Убедитесь, что DNS Cloudflare настроен только как DNS.
Причина этого проста. Multisite выбирает форум на основе имени хоста. Установка без Multisite с радостью примет любое имя хоста, которое вы укажете. Поэтому, пока все старые имена хостов направлены на эту установку, она будет обслуживать оставшийся сайт по всем этим именам.
То, что старые записи указывают на ваш сайт, и есть коренная причина.
Очистка вашей старой конфигурации — это не обходное решение, это и есть правильное решение.
Ого. Не помню, когда в последний раз я не соглашался с вами по факту. Как правило, когда я вижу ваш аватар в теме, в которой я комментировал, я знаю, что узнаю что-то новое!
Это правда. Однако они утверждают, что перешли на стандартную установку. Я им не верю.
Уже несколько лет (но, думаю, с момента появления Let’s Encrypt) в стандартной установке, если вы обращаетесь к ней через другое имя хоста, она выполняет редирект (это легко проверить, используя IP-адрес; я только что сделал это снова, добавив forum.bigmouth.bass в /etc/hosts для стандартной установки, и редирект сработал, как и ожидалось). Если вы обращаетесь к ней через HTTPS, что большинство браузеров делают по умолчанию сейчас, вы получите ошибку сертификата.
Если бы для доступа к вашему сайту через другое имя хоста требовался только DNS, то любой мог бы захватить ваш сайт, создав DNS-запись, указывающую на него.
Думаю, вот в чём магия:
Мое предположение: в app.yml всё ещё что-то вроде этого:
Мы проверили app.yml, и в нём нет пользовательских конфигураций или переопределений перенаправлений. Однако наш экземпляр по-прежнему не перенаправляет неизвестные имена хостов на основной домен.
Конфигурация Nginx: Можно ли проверить, применяется ли логика перенаправления из templates/web.ssl.template.yml? Нужно ли нам вручную проверять сгенерированный конфиг Nginx внутри контейнера?
Отладка Discourse: Есть ли какие-либо логи или команды, которые можно выполнить внутри контейнера, чтобы подтвердить, что Discourse корректно обрабатывает имена хостов?
Другие возможные причины: Если app.yml чист, что ещё может препятствовать ожидаемому поведению перенаправления? Не мешает ли Cloudflare или какой-то другой параметр?
Будем признательны за любые подсказки, как углубиться в это!
Все ли старые домены имеют включённую оранжевую облачную иконку? Поможет ли отключение оранжевой облачной иконки решить проблему? Если да, то, как я и предполагал изначально, Ричард прав, и вам нужно привести свою настройку в порядок.
Но если использование Cloudflare позволяет злоумышленнику (в данном случае вам) обслуживать чужой сайт на его домене, это кажется проблемой.
Мы уже удалили старые домены, но да, у них была включена оранжевая кнопка. Сейчас проблема в том, что если кто-то узнает IP нашего сервера и создаст там запись с включённой опцией прокси, наш сайт будет обслуживаться через их домен.
Вам следует запустить discourse-setup, чтобы убедиться, что у вас действительно стандартная установка. Если вы вставите свой старый app.yml, там может оказаться что-то лишнее. Я до сих пор не совсем убеждён, что у вас стандартная настройка.
Я до сих пор не уверен, что это так, но даже если это правда, вы ничего не сможете с этим поделать.
Я очень хочу поблагодарить вас, @pfaffman и @RGJ, теперь всё чисто и почти в порядке.
Проблема, с которой мы сталкиваемся сейчас, заключается в том, что все изображения брендинга исчезли, то же самое произошло с некоторыми изображениями пользователей.
Данные брендинга в порядке — я могу загрузить их со старого сервера, но что насчёт изображений пользователей? Все изображения сайта также отсутствуют.
Хм. Ну, если бы это был основной сайт, я бы ожидал, что путь будет https://forum.mamapedia.com/user_avatar/forum.mamapedia.com/jakeatgetit/24/5872_2.png, но это тоже не работает.
Если у вас всё ещё есть старый сайт, я бы сделал резервную копию этого и восстановил её на новом сайте.
Спасибо, @pfaffman, то, что я сделал до сих пор, кажется, работает.
Я зашел на старый сервер, переместил данные из /var/discourse/shared/standalone/uploads/default в тот же путь на новом сервере, и все аватары пользователей и сообщения восстановились.
Новая проблема в том, что брендинг сайта не работает, даже если я пытаюсь его обновить.
Проверяю здесь, нет ли у кого-нибудь идей. Мы очень близки к завершению этого вопроса с нашей стороны, нам нужна лишь помощь в устранении неполадок с проблемой сохранения «без логотипа». Заранее спасибо за любые предложения по решению этой проблемы!