Files
progcode/editorial/reviews/2020-04-draft.md
T
huncode b1e9aae0c2
Build and deploy / deploy (push) Successful in 13s
revise April 2020 proxy articles
2026-07-31 11:22:40 +03:00

144 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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; для конкретного проекта это отдельный сценарий.