Files
huncode b1e9aae0c2
Build and deploy / deploy (push) Successful in 13s
revise April 2020 proxy articles
2026-07-31 11:22:40 +03:00

10 KiB
Raw Permalink Blame History

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.

Что проверено в тексте

  1. Reverse proxy описан как граница двух HTTP-hop-ов, а не как «прозрачный провод».
  2. proxy_read_timeout назван интервалом между последовательными чтениями ответа, а не полной длительностью ответа.
  3. Host, X-Forwarded-* и real IP не объявлены достоверными без источника и договора доверия.
  4. 502/504 названы входом в диагностическую ветку, а не самостоятельным диагнозом.
  5. Учебная конфигурация не подменяет реальную: 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; для конкретного проекта это отдельный сценарий.