diff --git a/Caddyfile b/Caddyfile index 211d41be..59402dbf 100644 --- a/Caddyfile +++ b/Caddyfile @@ -239,7 +239,16 @@ meraocenka.ru { # Caddy→backend хопа, пользователь /trade-in никогда не видит. handle / { rewrite * /trade-in/mera-public - reverse_proxy tradein-frontend:3000 + reverse_proxy tradein-frontend:3000 { + # Тот же периметр-скраб, что у @uipreview (:87) и @tradein ниже. + # Этот блок вообще не под basic_auth, поэтому анонимный клиент + # тем более может прислать свой X-Authenticated-User. Сейчас + # инертно (лэндинг статичен, backend-вызовов нет), но снимаем + # ради единообразия периметра, а не полагаясь на то, что + # downstream ничего не делает с заголовком — иначе на этапе 5, + # когда откроется публичный /estimate, это станет дырой. + header_up -X-Authenticated-User + } } # Подстраницы САМОГО лэндинга. Нужны с момента мержа #2615: футер ссылается @@ -253,14 +262,24 @@ meraocenka.ru { # под него не подпадает и по-прежнему отдаёт 404. Регресс-тест на это — # в scripts/smoke-mera-perimeter.sh. handle /trade-in/mera-public/* { - reverse_proxy tradein-frontend:3000 + reverse_proxy tradein-frontend:3000 { + header_up -X-Authenticated-User + } } # Next.js уже эмитит ссылки на статику с /trade-in-префиксом (тот же # basePath) — passthrough без rewrite. Нужны для рендера страницы (JS/CSS # чанки), сами по себе не содержат ни B2B-данных, ни секретов. - handle /trade-in/_next/* { - reverse_proxy tradein-frontend:3000 + # + # Именно `static/*`, а не весь `_next/*` — тот же матчер, что у @uipreview + # (:78), который в проде доказал, что этого хватает для рендера. Широкий + # `_next/*` открыл бы анонимам ещё и `/_next/image` (оптимизация картинок, + # CPU-нагрузка по запросу), который на лэндинге не используется вообще: + # next/image в tradein-mvp/frontend/src/app/mera-public/ не импортируется. + handle /trade-in/_next/static/* { + reverse_proxy tradein-frontend:3000 { + header_up -X-Authenticated-User + } } # Allowlist-by-default: любой другой путь (включая B2B — /v2, /admin, diff --git a/scripts/smoke-mera-perimeter.sh b/scripts/smoke-mera-perimeter.sh index b91344e0..cda7725a 100644 --- a/scripts/smoke-mera-perimeter.sh +++ b/scripts/smoke-mera-perimeter.sh @@ -62,6 +62,12 @@ check "meraocenka.ru/v2 — B2B path must 404" "$BASE_MERA/v2" 404 check "meraocenka.ru/trade-in/v2 — B2B path must 404" "$BASE_MERA/trade-in/v2" 404 check "meraocenka.ru/trade-in/api/* — must 404 (не проксируем API)" "$BASE_MERA/trade-in/api/v1/me" 404 +# 2c. Статика проксируется ТОЛЬКО из _next/static/*. Оптимизатор картинок +# /_next/image на лэндинге не нужен (next/image там не импортируется) и +# наружу не открыт — иначе аноним получил бы CPU-нагрузку по запросу. +# Ловит расширение матчера обратно до `/trade-in/_next/*`. +check "meraocenka.ru/_next/image — must 404 (не открываем оптимизатор)" "$BASE_MERA/trade-in/_next/image?url=%2Ftest.png&w=64&q=75" 404 + # 3. B2B-данные trade-in по-прежнему закрыты анониму. # # ВНИМАНИЕ: проверять СТРАНИЦУ (/trade-in/v2) больше нельзя — она отдаёт 200.