feat(iis-traefik-dead-routes-cleanup): done — sestech + isc-artmaterials disabled
Renamed sestech.yml + isc-artmaterials.yml to .disabled (backups .bak-pre-dead-routes-cleanup-2026-05-21). Traefik file-provider auto-reloaded, no restart needed. 4 sibling live hosts (emspb, on.snolla, www.tandemmebel, kupimknigi) → Microsoft-IIS/10.0 без regression. maljarka оказался НЕ dead — yml route'ит maljarka.tandemmebel.ru (subdomain), не голый maljarka.ru. DNS на наш IP, IIS backend 200 OK. Изначальная task'а перепутала hostname. Side-finding: traefik HTTPS возвращает 502 для этого subdomain (backend сам 200). Новая ⚪ task traefik-maljarka-502-bug. Files renamed live в C:\Users\vitya\projects\docker\diskstation\traefik\data\ custom\ (вне репо) — поэтому в diff только task/wiki updates. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
27
STATUS.md
27
STATUS.md
@@ -42,14 +42,25 @@ _Updated: 2026-05-21_
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [iis-traefik-dead-routes-cleanup] — почистить traefik yml для 3 off-infra доменов
|
||||
**Status:** ready (заведена 2026-05-21 как follow-up к [[iis-on-host-migration]] close-out).
|
||||
**Scope:** 3 hostname'а в `data/custom/*.yml` теперь указывают на не-нашу инфру:
|
||||
- `maljarka.ru` — DNS снят (нет A record)
|
||||
- `sestech.ru` — запаркован у domainparking.ru
|
||||
- `ics-artmaterials.com` — A→87.236.16.28 (external nginx-reuseport WP)
|
||||
**Next action:** найти соответствующие traefik yml, `.disable` или удалить routes; smoke что хосты-соседи не задеты; уведомить user'а что rimiz.ru (404 CMS-side) — отдельный случай, не сюда.
|
||||
**Priority:** low — dead-routes не активные backend traffic, просто noise в logs/configs.
|
||||
## 🟢 [iis-traefik-dead-routes-cleanup] — sestech + isc-artmaterials disabled, maljarka оказалась live
|
||||
**Status:** done (2026-05-21 ~05:42 MSK; ~20 мин работы).
|
||||
**Result:**
|
||||
- `sestech.yml` → `.disabled` (backup `.bak-pre-dead-routes-cleanup-2026-05-21`). DNS `sestech.ru/www.sestech.ru → 31.31.205.163` = parking provider, наш traefik больше не отвечает (public requests идут на parking host через DNS).
|
||||
- `isc-artmaterials.yml` → `.disabled` (backup created). DNS `ics-artmaterials.com/www → 87.236.16.28 = external nginx-reuseport WP-хостинг`, public traffic не через нас.
|
||||
- **Maljarka — НЕ disabled** — оказалось yml route'ит `maljarka.tandemmebel.ru` (subdomain тандеммебели), не голый `maljarka.ru`. DNS → **94.19.247.14 = наш IP**, IIS backend отвечает 200 OK ("Малярка от Тандеммебель", 43KB). Live route, не dead. Изначальная task'а ошиблась с hostname.
|
||||
**Smoke regression:** 4 live hosts (emspb/on.snolla/www.tandemmebel/kupimknigi) → Microsoft-IIS/10.0 без regression. File-provider auto-reload, traefik restart не понадобился.
|
||||
**Side finding:** `maljarka.tandemmebel.ru` через traefik HTTPS → **502 Bad Gateway**, хотя backend (host.docker.internal:8089 + Host header) возвращает 200 OK. Конфиг yml identical к работающему `tandemmebel.yml`. Live bug. Новая follow-up ⚪ task `traefik-maljarka-502-bug`.
|
||||
**Atomic revert:** ```Move-Item C:\Users\vitya\projects\docker\diskstation\traefik\data\custom\sestech.yml.disabled C:\Users\vitya\projects\docker\diskstation\traefik\data\custom\sestech.yml -Force; Move-Item C:\Users\vitya\projects\docker\diskstation\traefik\data\custom\isc-artmaterials.yml.disabled C:\Users\vitya\projects\docker\diskstation\traefik\data\custom\isc-artmaterials.yml -Force```
|
||||
**Branch:** master
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [traefik-maljarka-502-bug] — `maljarka.tandemmebel.ru` через traefik HTTPS → 502, backend 200
|
||||
**Status:** ready (заведена 2026-05-21 в ходе [[iis-traefik-dead-routes-cleanup]]).
|
||||
**Symptom:** `docker exec traefik wget --spider https://maljarka.tandemmebel.ru/` → 502 Bad Gateway. Direct `wget --header='Host: maljarka.tandemmebel.ru' http://host.docker.internal:8089/` (тот же путь без traefik chain) → 200 OK Microsoft-IIS/10.0, 43KB HTML body.
|
||||
**Config sanity:** `maljarka.yml` синтаксически identical работающему `tandemmebel.yml` (same router shape, same service `http://host.docker.internal:8089/`, same `passHostHeader: true`). LE cert для `maljarka.tandemmebel.ru` присутствует в `acme.json`.
|
||||
**Next action:** (1) `docker exec traefik wget -O - https://maljarka.tandemmebel.ru/ 2>&1 | head -50` посмотреть точное traefik error response; (2) check traefik access logs (нужно включить если выключены) для конкретного path; (3) попробовать `docker restart traefik` (может быть stale state — traefik uptime 38h); (4) compare маljarka.yml header bytes (BOM, line endings) с tandemmebel.yml — может скрытая разница.
|
||||
**Priority:** low — site responds 200 через прямой path; traefik 502 затрагивает только публичный HTTPS доступ. Если этот subdomain критичен для tandemmebel — повысить priority.
|
||||
**Branch:** master
|
||||
**Done:** bak-серия `.bak-pre-attempt2-2026-05-19` для 13 yml; IIS binding `snolla *:8089` + Stop/Start Website; loop-detect через `host.docker.internal:8089` ≠ NAT loop (resolves to 192.168.65.254 host gateway) ✅; 11 cms yml (snolla, rimiz, labtools, labtoolspro, pilorama98, tandemmebel, emspb, kupimknigi, maljarka, sestech, isc-artmaterials) patched `:18080 → :8089`; host-side smoke 20 hostnames → все `Server: Microsoft-IIS/10.0` ✅; 📱 phone-tests (mobile internet): `emspb.ru` ✅, `labtools.ru` ✅; traefik logs clean (only known docker.sock noise); pre-existing CMS issues подтверждены и НЕ regression: `rimiz.ru/ics-artmaterials.com 404` (CMS-routing); `snolla.com` 301 → `on.snolla.com` (canonical default subdomain), `on/pilorama98/labtools/emspb.snolla.com` 200 OK.
|
||||
**Done (stayer):** stayer routes user'ом подтверждены «внутренние, наружу не светим» → `stostayer.yml → stostayer.yml.disabled`, `oldstostayer.yml → oldstostayer.yml.disabled`; `docker restart traefik`; verify: `stostayer.snolla.com`/`old.stostayer.ru` → 404 traefik no-route ✅; host IIS sites `stostayer :8090`/`stostayer.old :8091` остаются live для прямого/локального доступа (CMS отвечает контент, headers stripped через WinHTTP proxy на curl, но изнутри traefik / production-path headers Microsoft-IIS/ASP.NET корректные).
|
||||
|
||||
55
traefik-maljarka-502-bug.md
Normal file
55
traefik-maljarka-502-bug.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# traefik-maljarka-502-bug
|
||||
|
||||
## Goal
|
||||
|
||||
Разобраться почему `maljarka.tandemmebel.ru` через traefik HTTPS возвращает 502 Bad Gateway, хотя backend (IIS на host:8089 с правильным Host header) отвечает 200 OK с валидным CMS body.
|
||||
|
||||
## Evidence (2026-05-21)
|
||||
|
||||
| Path | Result |
|
||||
|---|---|
|
||||
| `docker exec traefik wget --spider https://maljarka.tandemmebel.ru/` | **HTTP/1.1 502 Bad Gateway** |
|
||||
| `docker exec traefik wget --header='Host: maljarka.tandemmebel.ru' http://host.docker.internal:8089/` | **HTTP/1.1 200 OK** (Microsoft-IIS/10.0, 43730 bytes, "Малярка от Тандеммебель") |
|
||||
| `Invoke-WebRequest http://localhost:8089/ -Headers @{Host='maljarka.tandemmebel.ru'}` | **200 OK** (host->host direct) |
|
||||
| `docker exec traefik wget --spider https://www.tandemmebel.ru/` | **200 OK** (sibling route, working) |
|
||||
|
||||
## Config diff
|
||||
|
||||
`maljarka.yml` vs `tandemmebel.yml` — syntactically identical (router→service→loadBalancer→servers, same backend URL `http://host.docker.internal:8089/`, same `passHostHeader: true`). LE cert для `maljarka.tandemmebel.ru` присутствует в `acme.json`.
|
||||
|
||||
## Hypotheses
|
||||
|
||||
1. **Stale traefik state** — uptime 38h+ с регулярными `docker provider connection error` retry-loop'ами. Restart traefik может сбросить bad state. **Easy first check.**
|
||||
2. **Hidden file encoding difference** — BOM / line endings / trailing whitespace в `maljarka.yml` vs `tandemmebel.yml`. `Get-FileHash` оба yml + `Format-Hex` на первые 16 байт.
|
||||
3. **acme.json corruption для maljarka cert** — cert exists но key/chain broken. Traefik не может handshake → fallback вернёт 502? Maybe.
|
||||
4. **Service name collision** — `maljarka` router/service name conflicts c чем-то ещё в dynamic config. Vrai unlikely (grep подтвердил unique).
|
||||
5. **Backend connection limit** — service-specific. Маловероятно.
|
||||
|
||||
## Implementation sketch
|
||||
|
||||
```powershell
|
||||
# 1. Get exact error body from traefik
|
||||
docker exec traefik wget -O - --server-response https://maljarka.tandemmebel.ru/ 2>&1 | Select-Object -First 30
|
||||
|
||||
# 2. Enable traefik access logs если не включены (data/traefik.yml accessLog: filePath)
|
||||
docker exec traefik cat /etc/traefik/traefik.yml | Select-String 'accessLog'
|
||||
|
||||
# 3. Restart traefik (brief ~1-2s interruption ВСЕХ routes)
|
||||
docker restart traefik
|
||||
Start-Sleep 5
|
||||
docker exec traefik wget --spider https://maljarka.tandemmebel.ru/ 2>&1 | Select-Object -First 3
|
||||
|
||||
# 4. Bytewise compare yml files
|
||||
Get-FileHash *.yml -Algorithm MD5 | Where-Object Path -Match '(maljarka|tandemmebel)\.yml$'
|
||||
Get-Content C:\...\maljarka.yml -Raw -Encoding Byte | Format-Hex | Select-Object -First 5
|
||||
```
|
||||
|
||||
## Open questions
|
||||
|
||||
- [ ] Является ли `maljarka.tandemmebel.ru` критичным для бизнеса (real traffic) или это test-subdomain? Если real — bump priority.
|
||||
- [ ] Существует ли site binding для этого hostname в IIS `snolla` site, или CMS catch-all'ит через `*` binding?
|
||||
|
||||
## Notes
|
||||
|
||||
- Скоприровано из close-out [[iis-traefik-dead-routes-cleanup]] как side-finding.
|
||||
- Атомарных изменений на инфре не делал — задача чисто диагностическая.
|
||||
Reference in New Issue
Block a user