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>
5.2 KiB
title, type, tags, sources, updated
| title | type | tags | sources | updated | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MoreThenCms — NULL SettingsData → 502 на HTTPS (per-tenant) | concept |
|
|
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 с блоком:
"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-сайта):
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