Merge pull request 'fix(mera/perimeter): www-формы доменов МЕРА обрывали TLS вместо редиректа' (#3137) from fix/3xxx-www-mera-tls into main
Some checks failed
Deploy Infra Host / sync-infra-host (push) Successful in 4s
Deploy / changes (push) Successful in 8s
perimeter-smoke-mera / smoke (push) Failing after 11s
Deploy / deploy-caddy (push) Has been skipped
Deploy / build-backend (push) Successful in 39s
Deploy / build-frontend (push) Successful in 39s
Deploy / build-worker (push) Successful in 40s
Deploy / deploy (push) Successful in 1m5s
Deploy / deploy-status (push) Successful in 1s
Deploy / perimeter-smoke (push) Successful in 11s

This commit is contained in:
lekss361 2026-08-27 11:18:28 +00:00
commit d18a2d607b
2 changed files with 35 additions and 0 deletions

View file

@ -12,6 +12,7 @@
# - meraocenka.ru — публичный лендинг МЕРА B2C (канонический домен)
# - merahome.ru — 301 на meraocenka.ru (домен-спутник)
# - meraotsenka.ru — 301 на meraocenka.ru (домен-спутник, альт. транслит)
# - www.mera*.ru — 301 на meraocenka.ru (все три www-формы)
#
# ПОЧЕМУ ЭТОТ ФАЙЛ ВООБЩЕ СУЩЕСТВУЕТ (не один Caddyfile на оба хоста).
# Деплой делает git reset --hard на origin/main + `caddy reload` — на прод
@ -498,3 +499,26 @@ merahome.ru {
meraotsenka.ru {
redir https://meraocenka.ru{uri} permanent
}
# www-формы всех трёх доменов МЕРА → 301 на канонический apex.
#
# ЗАЧЕМ ОТДЕЛЬНЫЕ БЛОКИ. A-записи `www.*` заведены и указывают на прод, но
# site-блоков под них не было — Caddy матчит строго по имени хоста и на
# неизвестное имя сертификата не выпускает. Клиент, набравший привычное
# «www.», получал не редирект, а обрыв TLS-рукопожатия (alert 80): для
# браузера это «сайт не открывается», без единой строки в логах доступа.
# Найдено сквозным аудитом периметра 27.08; www.gendsgn.ru такой блок имел
# с самого начала (выше) и потому работал — здесь ровно тот же приём.
#
# `{uri}` сохраняет путь и query: ссылка с визитки не теряет ?id=.
www.meraocenka.ru {
redir https://meraocenka.ru{uri} permanent
}
www.merahome.ru {
redir https://meraocenka.ru{uri} permanent
}
www.meraotsenka.ru {
redir https://meraocenka.ru{uri} permanent
}

View file

@ -20,6 +20,8 @@
# закрыты. Именно API, а не страница: см. комментарий у проверки ниже.
# 4. gendsgn.ru/api/v1/admin/* отдаёт 401 анониму (gate Site Finder).
# 5. merahome.ru и meraotsenka.ru отдают 301 на канонический meraocenka.ru.
# 5b. www-формы всех трёх доменов МЕРА — тоже 301 (без своих site-блоков
# Caddy не выпускает сертификат, и клиент видит обрыв TLS, а не редирект).
#
# ВАЖНО: проверки 1 и 2 требуют, чтобы DNS A-record meraocenka.ru → IP VPS
# уже существовал И деплой прошёл (сертификат Let's Encrypt выпущен). Пока
@ -163,6 +165,15 @@ check "gendsgn.ru/api/v1/admin/* — 401 anonymous" "$BASE_MAIN/api/v1/admin/use
check "merahome.ru — 301 to canonical" "https://merahome.ru/" 301
check "meraotsenka.ru — 301 to canonical" "https://meraotsenka.ru/" 301
# 5b. www-формы — та же проверка, отдельным блоком: их отсутствие проявляется
# НЕ как 404, а как обрыв TLS (curl вернёт пустой код). До 27.08 site-блоков
# под www.mera* не было, A-записи при этом существовали, и «www.» в адресной
# строке давал «сайт недоступен». Держим проверку, чтобы регресс был виден
# здесь, а не в жалобе клиента.
check "www.meraocenka.ru — 301 to canonical" "https://www.meraocenka.ru/" 301
check "www.merahome.ru — 301 to canonical" "https://www.merahome.ru/" 301
check "www.meraotsenka.ru — 301 to canonical" "https://www.meraotsenka.ru/" 301
# 6. Платёжный периметр (PR-D2) — готовит почву под PR-D3 (роутер) и PR-D4
# (Caddy), но САМ НИЧЕГО НЕ ОТКРЫВАЕТ. Ожидаем закрытое состояние С ОБЕИХ
# СТОРОН прямо сейчас: