--- 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 = '' 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]]