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

5.2 KiB
Raw Permalink Blame History

title, type, tags, sources, updated
title type tags sources updated
MoreThenCms — NULL SettingsData → 502 на HTTPS (per-tenant) concept
morethencms
cms
iis
ruvds
https
502
mssql
multi-tenant
../sources/iis-migration-to-ruvds-2026-05-23.md
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,1433dbo.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