Сохранение активного SSL-соединения между обратным прокси и внутренним сервером
У меня есть внутренний сервер (Apache), который находится слишком далеко от большинства наших пользователей, поэтому наша идея состоит в том, чтобы реализовать более близкий обратный прокси-сервер, который будет действовать как кеш.
На первый взгляд, это сработало как оберег. Кэшированные статические файлы обслуживаются чрезвычайно быстро, но для всего остального обратный прокси (NGINX) должен подключаться к внутреннему серверу, что занимает некоторое время для установления связи SSL, что замедляет эти первые запросы.
Я искал информацию по этому поводу, но не мог найти способ поддерживать эту связь. Есть способ сделать это?
Я даже пытался узнать больше о веб-сокетах, но все реализации, которые я мог найти, должны были отвечать на конкретный запрос, а не поддерживать соединение между обоими веб-серверами (NGINX на обратном прокси и Apache на сервере).
Есть ли у кого-нибудь из вас идеи или подсказки о том, что изучать / использовать / искать, чтобы достичь этого?
Огромное спасибо заранее!
Ответы
В nginx вы можете указать только keepaliveвосходящее соединение, если соединение определено в upstreamблоке. Например:
upstream backend {
server private-api.example.com:443;
keepalive 32;
}
Здесь keepalive
указывается максимальное количество одновременных открытых подключений к вышестоящим серверам на рабочий процесс .
Чтобы использовать восходящий поток, вы указываете его имя в своем, proxy_pass
а не в адресе серверной части.
Например, если вы ранее использовали:
proxy_pass https://private-api.example.com:443;
Вы бы изменили его на:
proxy_pass https://backend;
Буквально замените имя апстрима на определенное server
.
Вы также должны установить версию HTTP на 1.1 (потому что это довольно абсурдно по умолчанию 1.0) и очистить заголовок Connection:
proxy_http_version 1.1;
proxy_set_header Connection "";
Имейте в виду, что вы также keepalive_timeout
можете определить, upstream
что вам может понадобиться настроить. По умолчанию это 60 секунд, поэтому, если соединение простаивает в течение этого времени, оно будет закрыто, даже если keepalive
открыто меньше соединений. У внутреннего сервера будет собственный тайм-аут поддержки активности, который вам также нужно будет настроить отдельно.