10 KiB
P26 · апрель 2020 · Reverse proxy перед приложением — тройное ревью
Статус: принят в publication registry 31 июля 2026 года. Registry
накладывает ревизии по стабильным slug и сохраняет дату и автора базового
архива. articles.json, стандарт, очередь и package-конфигурация не
перезаписывались.
Состав пакета
| Материал | Stable slug | Визуал | Основной текст по draft gate |
|---|---|---|---|
| Практика | editorial-2020-04-practice-reverse-proxy |
reverse-proxy-request-hops-2020.svg |
9 620 знаков |
| Механизм | editorial-2020-04-mechanism-reverse-proxy |
reverse-proxy-header-boundary-2020.svg |
10 533 знака |
| Разбор | editorial-2020-04-field-reverse-proxy |
reverse-proxy-diagnosis-2020.svg |
10 504 знака |
Ревизии не содержат полей date и author: при будущей интеграции сохраняются
дата, автор и slug базового архива.
Проход 1 — факты и техника
Проверенные опоры
- Nginx
ngx_http_proxy_module:proxy_pass, явная подстановкаHost,proxy_set_header, а также различиеproxy_connect_timeout,proxy_send_timeoutиproxy_read_timeout. - Nginx
ngx_http_realip_module: адрес по header меняется только для источника, который явно назван черезset_real_ip_from. - Nginx
ngx_http_log_module:log_format,access_log,request_timeи роль формата журнала как наблюдаемого артефакта. - RFC 7239:
Forwarded, связь со старым семействомX-Forwarded-*и ограничение целостности forwarded-данных без доверенной цепочки proxy. - RFC 7230: исторический HTTP/1.1-контекст апреля 2020 года для маршрутизации и
Host.
Что проверено в тексте
- Reverse proxy описан как граница двух HTTP-hop-ов, а не как «прозрачный провод».
proxy_read_timeoutназван интервалом между последовательными чтениями ответа, а не полной длительностью ответа.Host,X-Forwarded-*и real IP не объявлены достоверными без источника и договора доверия.- 502/504 названы входом в диагностическую ветку, а не самостоятельным диагнозом.
- Учебная конфигурация не подменяет реальную:
127.0.0.1, пути, timeout-значения, URL и токены явно помечены заполнителями.
Границы и запреты
В текст не добавлены service mesh, OpenTelemetry, Kubernetes Ingress или
современные облачные практики как опыт автора 2020 года. Не опубликованы
реальные hostnames, IP-адреса, cookie, токены, secrets или пользовательские
данные. curl, access-log и значения времени даны как учебные либо
синтетические примеры; они не выдаются за запуск на стенде.
Вердикт прохода 1: пройден. Технические утверждения привязаны к первичным источникам, а недоказанные эксплуатационные выводы явно ограничены.
Проход 2 — редактура, голос и структура
Проверка голоса M3 / апрель 2020
Автор развивает ширину от HTTP и локальной доставки к backend boundary:
клиент → Nginx → приложение, конфигурация, таймаут, безопасный access-log.
Тон прагматичный: «симптом → причина → проверка → действие». Он не говорит
от лица владельца крупной платформы и не обещает универсальные значения
таймаутов. Слова upstream, hop, TLS termination, Forwarded и real IP
привязаны к конфигурации, журналу или конкретному ограничению.
Обязательные элементы в каждой статье
| Критерий | Практика | Механизм | Разбор |
|---|---|---|---|
| Проблема и цена в первых двух абзацах | Да | Да | Да |
| 5–15 тыс. знаков основного текста | Да | Да | Да |
table с caption и thead |
Да | Да | Да |
figure с содержательными alt и подписью |
Да | Да | Да |
| Конфигурация, curl или log-пример | Nginx + curl | Nginx + log format | log format + синтетический log + curl |
| Нумерованный маршрут | Да | Да | Да |
| Не менее двух первичных/официальных ссылок | 5 | 5 | 5 |
Проверены повторы, канцелярские обобщения и анахронизмы. Заголовки отвечают именно на вопрос соответствующей статьи: практический контракт, механизм двух соединений и безопасное расследование. В финалах зафиксированы следующий шаг и границы применимости, а не обещание «решить все proxy-проблемы».
Вердикт прохода 2: пройден. Плотность достаточна, тон соответствует переходу автора к delivery и backend boundary в 2020 году.
Проход 3 — визуал и выпускной preflight
Реально выполненные проверки
node --check scripts/upgrade-2020-04.mjs
→ code 0
npm run audit:draft -- scripts/upgrade-2020-04.mjs
→ code 0
→ PASS practice: 9 620 body chars
→ PASS mechanism: 10 533 body chars
→ PASS field: 10 504 body chars
xmllint --noout public/assets/editorial/2020/reverse-proxy-request-hops-2020.svg \
public/assets/editorial/2020/reverse-proxy-header-boundary-2020.svg \
public/assets/editorial/2020/reverse-proxy-diagnosis-2020.svg
→ code 0
npm напечатал известные предупреждения пользовательской конфигурации
store-dir, cache-dir, public-hoist-pattern; команда завершилась кодом 0,
они не относятся к P26.
Визуальный preflight
Все три SVG отрендерены Sharp при ширине 375 px и просмотрены вручную:
reverse-proxy-request-hops-2020.svg— вертикальная последовательность клиента, Nginx, приложения и совместной диагностики; переполнения и обрезания не обнаружены.reverse-proxy-header-boundary-2020.svg— крупные карточки источника, договора и чтения приложением; вторичный текст остаётся различимым.reverse-proxy-diagnosis-2020.svg— пять вертикальных шагов расследования; стрелки не перекрывают подписи, финальная карточка читается на 375 px.
SVG не содержат внешних ресурсов. В HTML каждой статьи есть отдельные
содержательные alt и figcaption; таблицы завёрнуты в table-scroll, как
требует существующий шаблон.
Основной редактор независимо просмотрел финальные raster-версии трёх схем на
375 px и подтвердил этот результат. После подключения registry strict audit и
production build также пройдены. Они не подменяют запуск Nginx, curl или
browser на конкретном стенде.
Невыполненные проверки, которые не выдаются за факты
- Nginx не запускался и конфигурация не загружалась в daemon.
- Учебный
curlне выполнялся. - Browser, CI, staging и production-прогон не выполнялись.
- Не было доступа к реальному access-log или логу приложения; строка в статье явно названа синтетической.
Интеграционная проверка
| Проверка | Результат |
|---|---|
| Strict audit после подключения registry | PASS: 9 620 / 10 533 / 10 504 знака; 1 / 2 / 1 table и 2 / 2 / 3 code example |
npm run build |
PASS, code 0, 374 статические страницы |
| Scope/self-review | PASS: в revision нет date/author, articles.json не перезаписан |
Выпусковой вердикт: тройное ревью пройдено, пакет принят к публикации. Статические проверки подтверждают качество редакционного слоя, но не утверждают фактическое поведение Nginx, доступность стенда или реальный access-log; для конкретного проекта это отдельный сценарий.