Сохранение активного SSL-соединения между обратным прокси и внутренним сервером

Aug 19 2020

У меня есть внутренний сервер (Apache), который находится слишком далеко от большинства наших пользователей, поэтому наша идея состоит в том, чтобы реализовать более близкий обратный прокси-сервер, который будет действовать как кеш.

На первый взгляд, это сработало как оберег. Кэшированные статические файлы обслуживаются чрезвычайно быстро, но для всего остального обратный прокси (NGINX) должен подключаться к внутреннему серверу, что занимает некоторое время для установления связи SSL, что замедляет эти первые запросы.

Я искал информацию по этому поводу, но не мог найти способ поддерживать эту связь. Есть способ сделать это?

Я даже пытался узнать больше о веб-сокетах, но все реализации, которые я мог найти, должны были отвечать на конкретный запрос, а не поддерживать соединение между обоими веб-серверами (NGINX на обратном прокси и Apache на сервере).

Есть ли у кого-нибудь из вас идеи или подсказки о том, что изучать / использовать / искать, чтобы достичь этого?

Огромное спасибо заранее!

Ответы

MichaelHampton Aug 19 2020 at 07:54

В 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открыто меньше соединений. У внутреннего сервера будет собственный тайм-аут поддержки активности, который вам также нужно будет настроить отдельно.