revise April 2020 proxy articles
Build and deploy / deploy (push) Successful in 13s

This commit is contained in:
2026-07-31 11:22:40 +03:00
parent cf5472d22f
commit b1e9aae0c2
7 changed files with 678 additions and 1 deletions
+143
View File
@@ -0,0 +1,143 @@
# 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`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html): `proxy_pass`, явная подстановка `Host`, `proxy_set_header`, а также различие `proxy_connect_timeout`, `proxy_send_timeout` и `proxy_read_timeout`.
- [Nginx `ngx_http_realip_module`](https://nginx.org/en/docs/http/ngx_http_realip_module.html): адрес по header меняется только для источника, который явно назван через `set_real_ip_from`.
- [Nginx `ngx_http_log_module`](https://nginx.org/en/docs/http/ngx_http_log_module.html): `log_format`, `access_log`, `request_time` и роль формата журнала как наблюдаемого артефакта.
- [RFC 7239](https://www.rfc-editor.org/rfc/rfc7239): `Forwarded`, связь со старым семейством `X-Forwarded-*` и ограничение целостности forwarded-данных без доверенной цепочки proxy.
- [RFC 7230](https://www.rfc-editor.org/rfc/rfc7230): исторический 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
### Реально выполненные проверки
```text
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; для конкретного проекта это отдельный сценарий.