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

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

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

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

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

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

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

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

решение1

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

Связанный контент