2026 OpenClaw продакшен reverse proxy и TLS:
WebSocket, подпуть vs поддомен и разбор 502/сбоев рукопожатия за Nginx/Caddy

Около 16 мин · MACCOME

В контейнере Gateway выглядит здоровым, а за Nginx/Caddy появляются 502, срывы WebSocket-рукопожатия или бесконечные редиректы? Статья фокусируется на слое периметровый reverse proxy + завершение TLS + upgrade WebSocket. Она дополняет разбор сети Docker: там — кто какие пакеты видит, здесь — корректны ли цепочка HTTP/1.1 upgrade и пути от браузера до Gateway. Вы получите шесть частых ловушек, две таблицы топология/симптомы, копируемые фрагменты, шестишаговый продакшен-runbook и три жёсткие метрики для дежурств. После прочтения ясно, править ли заголовки Upgrade или возвращаться к апстриму 127.0.0.1:18789.

Шесть типичных заблуждений у reverse proxy (почему curl видит апстрим, а браузер получает 502)

  1. Только proxy_pass без HTTP/1.1 и Upgrade: WebSocket в браузере даёт 400/502 на периметре, а логи похожи на падение Gateway.
  2. Двойной префикс подпути: прокси снимает /openclaw, а приложение всё ещё отдаёт абсолютные URL с корня — статика и WS расходятся.
  3. HTTP/2 listener вместе с WS без проверки ALPN: в ряде связок нужен отдельный сервер для WS или явный откат на HTTP/1.1, иначе рукопожатия падают эпизодически.
  4. Слишком короткий proxy_read_timeout: длинные выводы модели или всплески канала тихо рвутся на периметре, вызывая шторм переподключений на апстрим.
  5. Неполная цепочка сертификатов, поправили только предупреждения браузера: строгие автоматизационные клиенты падают, десктопные CLI проходят.
  6. Кеш CDN по умолчанию или короткие idle-таймауты: управляющий WebSocket обрабатывается как обычный GET или рвётся рано — кажется случайным отвалом.

Таблица топологий сводит прокси на одном хосте, отдельный хост прокси, поддомен и подпуть; далее — заголовки и матрица симптомов.

Выбор топологии: один хост, отдельный хост, подпуть и поддомен — влияние на разбор

Reverse proxy на том же хосте, что и Gateway (Nginx/Caddy рядом), даёт кратчайший путь: curl -v http://127.0.0.1:18789 проверяет апстрим локально. Отдельный хост прокси добавляет прыжки — перепроверьте security groups, внутренний DNS и TLS SNI. Поддомены обычно обходят снятие пути и войны за Cookie Path; подпуть подходит для одного брендового входа, но требует снять префикс только один раз на базовом URL OpenClaw и на прокси, плюс в devtools убедиться, что WS URL всё ещё указывают на ожидаемый wss:// путь.

В заявках на изменения прикладывайте два скриншота: финальный URL в адресной строке и Request URL рукопожатия WebSocket во вкладке Network. Без них ревью часто ошибочно классифицирует проблему как таймаут модели или OAuth каналов. Если есть корпоративный HTTPS-прокси, разделяйте путь офисного браузера (PAC) и дата-центрового прокси (часто прямой) — расхождение симптомов нормально.

В 2026 году HTTP/2 на периметре с HTTP/1.1 WebSocket на апстриме всё ещё норма: выясните, на каком прыжке разрешён upgrade. Не включайте одновременно принудительный H2 и кастомные переписывания WS без захвата пакетов — иначе разбор превращается в гадание.

ТопологияКогда уместнаПлюс для эксплуатацииТипичные ямы
Один хост + loopback-апстримОдин VPS / постоянно включённый удалённый MacЛокальный curl для разбора; TLS и процесс в одних логахПривязка к 0.0.0.0 расширяет поверхность — нужен фаервол
Отдельный хост проксиМного бэкендов, blue/green, WAF спередиПериметр отделён от вычислений; централизованные продления сертификатовВнутренние маршруты, SNI, дрейф целей health-check
ПоддоменWS отделён от основного сайтаЯсная семантика путей; проще правила CDNНесколько сертификатов; отдельная политика HSTS
ПодпутьОдин брендовый входной доменНиже когнитивная нагрузка на пользователяСнятие префикса, циклы редиректов, неверный корень статики

Nginx и Caddy: обязательные заголовки WebSocket и сводка таймаутов

На периметре нужен upgrade до HTTP/1.1, пропуск или сборка Connection: upgrade и Upgrade: websocket, и таймауты чтения выше самого медленного перцентиля модели. Таблица — чеклист для ревью кода.

Часто упускают буферизацию прокси. proxy_buffering может помочь обычным API, но стриминг или долгоживущие соединения добавляют задержку или ощущение обрезки; при потоковых каналах или поведении вроде SSE прогоните staging под нагрузкой до включения буфера по умолчанию.

ПроверкаNginxCaddy
Версия протоколаproxy_http_version 1.1;reverse_proxy по умолчанию HTTP/1.1; следите за явными transport
Цепочка UpgradeUpgrade $http_upgrade; Connection "upgrade";Чаще автоматически; кастом через header_up
Host и IP клиентаproxy_set_header Host $host;, X-Forwarded-*header_up Host {host}; доверие к числу хопов прокси
Долгие соединенияproxy_read_timeout / send_timeouttransport http { read_timeout ... } (синтаксис по версии)
Большие телаclient_max_body_sizeДирективы лимита тела (документация Caddy)
nginx
# Фрагмент: reverse proxy на локальный Gateway (порт по развёртыванию; пример 18789)
location / {
  proxy_pass http://127.0.0.1:18789;
  proxy_http_version 1.1;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_read_timeout 3600s;
  proxy_send_timeout 3600s;
}
Caddyfile
# Фрагмент: авто TLS + WebSocket-апстрим
openclaw.example.com {
    reverse_proxy 127.0.0.1:18789 {
        header_up Host {host}
        header_up X-Forwarded-For {remote_host}
        header_up X-Forwarded-Proto {scheme}
    }
}
info

Совет: после правок сначала на апстриме проверьте семантику рукопожатия командой curl -v -H "Connection: Upgrade" -H "Upgrade: websocket" http://127.0.0.1:18789/, затем публичный wss://; иначе TLS и прокси будут перекладывать вину.

Матрица симптомов: 502, 413, не 101 у WS, редиректы, сертификаты

Сопоставляйте симптомы с периметром, апстримом или конфигурацией приложения до пересборки контейнеров. Если таблица указывает на сеть контейнеров, вернитесь к разбору сети Docker; если каналы подключены, но Slack/Telegram молчат — разбор каналов.

Только прод, стейдж чист: сравните цепочку сертификатов (тот же УЦ?), версию правил CDN/WAF и ветвления map/if прокси по User-Agent. Многие 502 — ложные срабатывания на периметре, не версия OpenClaw.

СимптомСначала подозреватьПроверить
502 Bad GatewayАпстрим не слушает, фаервол, неверное семейство сокетовcurl с прокси к апстриму; error.log upstream timed out / refused
413 Request Entity Too LargeМаленький client_max_body_size на периметреУвеличить и reload; синхронизировать лимиты CDN/WAF
WS не 101Нет Upgrade, переписан путь, http→https ломает рукопожатиеСтатус в Network браузера; порядок location и return 301
Циклы редиректаПринудительный HTTPS без X-Forwarded-ProtoВременно ослабить HSTS на периметре; добавить forwarded-заголовки
Предупреждения сертификата / частичные сбои клиентовНеполная цепь, неверный SNI, смешение IP-сертификатовopenssl s_client -servername для цепи; NTP

Шестишаговый runbook: от пилотного имени до продакшен-входа готового к дежурству

  1. Зафиксировать план URL: публичная база https://, подпуть да/нет, делит ли WS хост с HTTP.
  2. Локальный пробник: с хоста прокси ударить по loopback-апстриму и подтвердить процесс/порт OpenClaw (пример 18789).
  3. Минимальный фрагмент Nginx/Caddy: сначала только health, затем расширять; каждый шаг откатываем.
  4. Захватить полную сессию WS: браузер и CLI; выровнять логи по request_id, если есть.
  5. Нарастить безопасность: списки IP, rate limit, кастом WAF; политика токенов согласована с продакшен-runbook Docker.
  6. Базовая линия наблюдаемости: зафиксировать P95 апстрима, переподключения WS в минуту, остаток срока сертификата для алертов.
  7. Учения отката: в окне обслуживания откатить только конфиг прокси, не образ — чтобы в runbook были реальные команды.

Три жёсткие метрики для Grafana и дежурной инструкции

  1. RTT апстрима P95: от воркеров прокси до 127.0.0.1:18789 или внутреннего VIP — без публичной задержки, чтобы отделить медленный периметр от медленного Gateway.
  2. Доля аномальных закрытий WebSocket: агрегировать в минуту; всплески часто связаны с таймаутами, релизами или 429 у провайдера модели — сверяйте с материалом о маршрутизации.
  3. Остаток срока сертификата: тикет при менее 14 днях; сбои продления Let's Encrypt и коммерческих УЦ отрабатывайте сначала на staging.

При централизованных логах совместите долю 5xx в access прокси и ошибки приложения Gateway на двух осях — когда растёт только одна сторона, зона ответственности очевидна для разборов.

Почему Gateway только на ноутбуке плохо держит продакшен-вход и долгую автоматизацию

Ноутбучные прокси быстро проверяют фрагменты, но сон, переключения VPN и нестабильный домашний uplink делают TLS и продления ручной работой; SLO по 502 сложно закрепить в договоре. Reverse proxy + постоянный Gateway на выделенных хостах 24/7 (например арендованные облачные Mac на Apple Silicon или контролируемые VPS) превращают лимиты скорости, сертификаты и хранение логов в стандартные изменения. Стабильный вход нужен, чтобы связка OpenClaw с CI и конвейерами подписи была проверяема и передаваема.

Самостоятельный стек прокси тянет за собой CVE OpenSSL, Nginx и ОС; команды, долго связывающие OpenClaw с CI, подписью и мульти-канальными ботами, часто экономят суммарно за счёт предсказуемой выделенной мощности и ясных регионов/сроков аренды, а не домашних экспериментов. Облачные Mac MACCOME дают несколько регионов и понятные уровни аренды как чистую постоянную машину за завершением TLS: сначала закрепите каталоги и границы прав из гайда по установке на три платформы, затем разместите исполнение контрактно через цены аренды Mac mini и региональные страницы — Сингапур, Токио, Сеул, Гонконг, Вирджиния, Кремниевая долина — пока периметровый прокси несёт только политику и наблюдаемость.

Вопросы соединений, сессий и каналов ищите по ключевым словам в центре помощи; для визуального разбора сочетайте с материалами об удалённом рабочем столе и SSH/VNC.

Частые вопросы

502: сначала прокси или Docker?

curl loopback-апстрима с хоста прокси; если нет — к разбору Docker. Тарифы: цены аренды Mac mini.

Подпуть или поддомен?

Поддомены реже страдают от снятия префикса; подпуть требует одинаковых базовых URL. Установку сверяйте с гайдом по установке на три платформы.

WS рвётся за CDN?

Отключите кеш, удлините idle-таймаут или обходите CDN поддоменом управления. Каналы — разбор Slack/Discord/Telegram.

Логи и тикеты куда?

Корпоративные изменения — тикеты центра помощи, половину конфига Nginx не теряйте в прод-чате.