Назад | Перейти на главную страницу

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