Files
progcode/web/public/assets/editorial/2020/reverse-proxy-request-hops-2020.svg
huncode b1e9aae0c2
Build and deploy / deploy (push) Successful in 13s
revise April 2020 proxy articles
2026-07-31 11:22:40 +03:00

55 lines
5.0 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="720" height="1260" viewBox="0 0 720 1260" role="img" aria-labelledby="title desc">
<title id="title">Один пользовательский запрос проходит через два HTTP-hop-а</title>
<desc id="desc">Вертикальная схема: клиент отправляет внешний запрос Nginx, proxy формирует заголовки и лимиты, затем создаёт отдельный запрос к приложению. Внизу access-log и лог приложения связывают диагностику.</desc>
<defs>
<linearGradient id="bg" x1="0" x2="0" y1="0" y2="1">
<stop offset="0" stop-color="#f5f8ff"/>
<stop offset="1" stop-color="#eef7f4"/>
</linearGradient>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
<path d="M0,0 L12,6 L0,12 Z" fill="#1f4f86"/>
</marker>
</defs>
<rect width="720" height="1260" rx="32" fill="url(#bg)"/>
<text x="48" y="66" fill="#15314f" font-family="Arial, sans-serif" font-size="34" font-weight="700">Один запрос — два HTTP-hop-а</text>
<text x="48" y="104" fill="#496178" font-family="Arial, sans-serif" font-size="22">Ищем сигнал там, где он меняется</text>
<rect x="48" y="146" width="624" height="156" rx="22" fill="#ffffff" stroke="#8aa9c8" stroke-width="3"/>
<circle cx="92" cy="198" r="22" fill="#2f77b6"/>
<text x="84" y="206" fill="#ffffff" font-family="Arial, sans-serif" font-size="21" font-weight="700">1</text>
<text x="132" y="196" fill="#15314f" font-family="Arial, sans-serif" font-size="29" font-weight="700">Клиент</text>
<text x="132" y="232" fill="#40566b" font-family="Arial, sans-serif" font-size="22">Метод • путь • Host • внешний статус</text>
<text x="132" y="266" fill="#40566b" font-family="Arial, sans-serif" font-size="22">Это входной HTTP-hop</text>
<line x1="360" y1="318" x2="360" y2="382" stroke="#1f4f86" stroke-width="5" marker-end="url(#arrow)"/>
<text x="394" y="358" fill="#1f4f86" font-family="Arial, sans-serif" font-size="22" font-weight="700">внешнее соединение</text>
<rect x="48" y="402" width="624" height="248" rx="22" fill="#e5f0fb" stroke="#2f77b6" stroke-width="3"/>
<circle cx="92" cy="454" r="22" fill="#2f77b6"/>
<text x="84" y="462" fill="#ffffff" font-family="Arial, sans-serif" font-size="21" font-weight="700">2</text>
<text x="132" y="452" fill="#15314f" font-family="Arial, sans-serif" font-size="29" font-weight="700">Nginx reverse proxy</text>
<text x="132" y="490" fill="#40566b" font-family="Arial, sans-serif" font-size="22">Выбирает location и upstream</text>
<text x="132" y="526" fill="#40566b" font-family="Arial, sans-serif" font-size="22">Явно формирует Host и X-Forwarded-*</text>
<text x="132" y="562" fill="#40566b" font-family="Arial, sans-serif" font-size="22">Отдельно ждёт connect, send и read</text>
<rect x="132" y="586" width="418" height="42" rx="12" fill="#ffffff"/>
<text x="153" y="615" fill="#1f4f86" font-family="Arial, sans-serif" font-size="21" font-weight="700">Граница: контракт + журнал</text>
<line x1="360" y1="668" x2="360" y2="732" stroke="#1f4f86" stroke-width="5" marker-end="url(#arrow)"/>
<text x="394" y="708" fill="#1f4f86" font-family="Arial, sans-serif" font-size="22" font-weight="700">новый upstream-hop</text>
<rect x="48" y="752" width="624" height="156" rx="22" fill="#ffffff" stroke="#6ba98a" stroke-width="3"/>
<circle cx="92" cy="804" r="22" fill="#3a8b60"/>
<text x="84" y="812" fill="#ffffff" font-family="Arial, sans-serif" font-size="21" font-weight="700">3</text>
<text x="132" y="802" fill="#15314f" font-family="Arial, sans-serif" font-size="29" font-weight="700">Приложение</text>
<text x="132" y="838" fill="#40566b" font-family="Arial, sans-serif" font-size="22">Видит peer proxy и согласованные headers</text>
<text x="132" y="872" fill="#40566b" font-family="Arial, sans-serif" font-size="22">Отвечает на отдельное соединение</text>
<line x1="360" y1="924" x2="360" y2="978" stroke="#3a8b60" stroke-width="5" marker-end="url(#arrow)"/>
<rect x="48" y="998" width="624" height="202" rx="22" fill="#183c5f"/>
<text x="82" y="1048" fill="#ffffff" font-family="Arial, sans-serif" font-size="29" font-weight="700">Совместная диагностика</text>
<text x="82" y="1088" fill="#dcecff" font-family="Arial, sans-serif" font-size="22">proxy: status • request_time • upstream</text>
<text x="82" y="1124" fill="#dcecff" font-family="Arial, sans-serif" font-size="22">приложение: тот же безопасный токен</text>
<text x="82" y="1164" fill="#9fd8bd" font-family="Arial, sans-serif" font-size="22" font-weight="700">Вывод: меняем подтверждённый hop</text>
</svg>