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