Files
admin/.wiki/concepts/morethencms-null-settingsdata-https-502.md
vitya 2811b5a180 fix(iis-migration): maljarka.tandemmebel.ru 502-on-HTTPS resolved
Root cause (NOT a migration defect): MoreThenCms tenant `maljarka`
had `dbo.Sites.SettingsData = NULL` (no `httpSecure` block) -> on a
real HTTPS request SnollaMiddleware throws KeyNotFoundException ->
502. HTTP served 200 fine. DNS/TLS/IIS binding all correct.

Fix applied to shared MSSQL (mssql.kzntsv.site): UPDATE Sites set
SettingsData with httpSecure{enableHttps:true,...} + recycle snolla
pool. Verified 443->200 server-local and external via 80.64.31.36;
kupimknigi untouched. Audit: maljarka was the only NULL-settings
site with a :443 binding (of 25); rimiz degraded for another reason.

- new concept: morethencms-null-settingsdata-https-502
- entities/ruvds-iis-host: maljarka moved from Degraded -> fixed
- index.md + log.md + STATUS.md + NEXT_SESSION.md updated

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 15:15:12 +03:00

67 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: MoreThenCms — NULL SettingsData → 502 на HTTPS (per-tenant)
type: concept
tags: [morethencms, cms, iis, ruvds, https, 502, mssql, multi-tenant]
sources: [../sources/iis-migration-to-ruvds-2026-05-23.md]
updated: 2026-06-08
---
# MoreThenCms — пустой `Sites.SettingsData` ⇒ 502 на HTTPS
## Симптом
Один тенант catch-all CMS ([[ruvds-iis-host]], движок **MoreThenCms**) недоступен **только по HTTPS**, тогда как остальные живут:
| | maljarka | рабочий тенант (kupimknigi) |
|---|---|---|
| `:80` (HTTP) | **200** | 200 |
| `:443` (HTTPS) | **502** Bad Gateway (пустое тело) | 200 |
502 приходит с `Server: Microsoft-IIS/10.0`, `X-Powered-By: ASP.NET`, `Content-Length: 0`. В IIS-логе (`W3SVC1`) — `sc-status=502 sc-substatus=0 sc-win32-status=0` (managed-код, **не** HTTP.sys/ARR; ARR на хосте не установлен).
## Root cause
У сайта в БД `MoreThenCms` (`mssql.kzntsv.site,1433``dbo.Sites`) поле **`SettingsData` = NULL**. У рабочих сайтов там JSON с блоком:
```json
"httpSecure": { "enableHttps": true, "httpsOnly": false, "forceHttpsRedirect": false, "forceHttpsApi": false, "forceHttpsAdministration": false }
```
На **HTTPS**-запросе `SnollaMiddleware` читает ключ `httpSecure`/`enableHttps` из настроек сайта. При NULL-настройках ключа нет → `KeyNotFoundException: The given key was not present in the dictionary` (`MoreThenCms.Owin.ErrorHandler.cs:line 61`) → middleware отдаёт **502 до** пайплайна (в логе видно `Begin invoke /` → сразу `End invoke /`, без `RedirectionsService`/рендера). По HTTP блок не читается → страница рендерится (200).
Не зависит от хоста — данные в общей БД, поэтому симптом был идентичен и на старом home-IIS:8089. **Не дефект миграции.**
## Диагностический след (как ловить)
- Логи движка: `C:\Logs\MoreThenCms\log.YYYYMMDD.txt` (log4net). 502-запрос = `Begin invoke /``End invoke /` без промежуточных шагов; `KeyNotFoundException` в `Owin.ErrorHandler` (async-стек теряет исходный кадр — он не покажет конкретный словарь, не трать время).
- Воспроизводить **с самого сервера** против `127.0.0.1` (`curl.exe --resolve host:443:127.0.0.1`), чтобы исключить свой сетевой путь (дома трафик может уходить через VPN/прокси — см. [[proxy-debugging-test-the-real-client]]).
- Подключение к БД: строка `MoreThenCmsEntities` в `C:\sites\snolla\web.config` (EF-обёртка, `provider connection string=...`). `INFORMATION_SCHEMA.COLUMNS` под app-юзером может быть пуст — читать колонки из ридера (`GetName`), не из метаданных.
## Fix
Заполнить `SettingsData` сайта блоком `httpSecure` (структуру брать с рабочего sibling-сайта):
```sql
UPDATE dbo.Sites
SET SettingsData = N'{ "httpSecure": { "enableHttps": true, "httpsOnly": false,
"forceHttpsRedirect": false, "forceHttpsApi": false, "forceHttpsAdministration": false } }'
WHERE SiteId = '<site-guid>' AND SettingsData IS NULL; -- гард: не затереть существующие настройки
```
Затем `Restart-WebAppPool snolla` (настройки сайта кэшируются в памяти w3wp). App-native альтернатива: в админке MoreThenCms (`/admin`) включить «HTTPS» в настройках сайта — пишет тот же блок.
`httpsOnly/forceHttpsRedirect=false` ⇒ поведение HTTP не меняется, риск минимальный; откат = вернуть `SettingsData = NULL`.
## Scope (audit 2026-06-08)
На [[ruvds-iis-host]] из 25 SNI-биндингов :443 единственным сайтом с NULL-настройками был **maljarka** — пофикшен 2026-06-08. Прочие ~27 NULL-сайтов **не имеют :443-биндинга** (HTTP-only / неактивные домены) → этот баг их не заденет, пока кому-то не повесят HTTPS-биндинг. **Памятка:** при добавлении нового HTTPS-тенанта на этот CMS — проверить, что у его сайта `SettingsData` содержит `httpSecure`.
> Не путать: `rimiz.ru`/www/`rimiz.snolla.com` тоже «degraded», но у них `SettingsData` заполнен — их 502/404 имеет **другую** причину (dead-routes контента), не этот баг.
## Cross-refs
- Хост: [[ruvds-iis-host]]
- БД-бэкенд: [[vds-kzntsv]] (MSSQL `mssql.kzntsv.site`)
- Сетевой анти-паттерн при диагностике: [[proxy-debugging-test-the-real-client]]
- Контекст миграции: [[../sources/iis-migration-to-ruvds-2026-05-23]]