Сеть5 мин чтения
Что на самом деле делает для вас reverse proxy
Почему ваше приложение слушает случайный порт, а мир всё равно достаёт его на 443 — в порядке прихода пакетов.
Ваше приложение слушает выделенный ему порт. Посетители набирают имя и ожидают порт 443. То, что между ними, — reverse proxy, и понимание его объясняет почти всё, что во вкладке Domain выглядит магией.
По порядку
- Посетитель резолвит ваш домен и подключается на 443.
- Proxy терминирует TLS — сертификат держит он, а не ваше приложение.
- Он читает запрошенный hostname и решает, какой сервер имеется в виду.
- Он передаёт запрос внутрь, на ваш порт, добавляя header-ы о том, кто спрашивал изначально.
- Ваше приложение отвечает, и proxy отдаёт ответ обратно по шифрованному соединению.
Что это даёт
- Ваше приложение вообще не занимается сертификатами — одной вещью для продления и ошибки меньше.
- Несколько доменов достают несколько серверов через один адрес и один порт.
- Ваш origin-порт не нужно выставлять в интернет вообще.
Header, на котором спотыкаются
Поскольку соединение с вашим приложением устанавливает proxy, приложение видит клиентом адрес proxy. Настоящий лежит в X-Forwarded-For. Если вы ограничиваете частоту, логируете или определяете страну по IP — читайте этот header, иначе все посетители выглядят одним человеком, и этот баг проявляется только в production.