Универсальный постоянный пул соединений proxy с nginx

Универсальный постоянный пул соединений proxy с nginx

Проблема в том, что есть буквально 100 различных удаленных серверов, которые постоянно меняются. Я подключаюсь к ним с помощью PHP, используя curl, этот процесс PHP умирает после завершения, и нет способа сохранить соединение открытым. С моими текущими знаниями мне пришлось бы настраивать каждый из них в конфигурации nginx. Следующее работает для одного сервера:

upstream some-server {
    server some-server.com:443;
    keepalive 20;
}
server {
    listen 80;
    server_name some-server.com;
    location / {
        proxy_pass https://some-server;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

Единственная проблема в том, что в восходящем потоке some-server.comэто жестко запрограммировано и не может быть переменной.

Ниже представлена ​​моя попытка сделать универсальную версию того же самого. Она правильно выполняет прокси, но не сохраняет постоянный пул подключений к удаленному серверу:

server {
    listen 8889;
    location / {
        proxy_pass https://$http_host$request_uri;
        resolver 8.8.8.8;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}
upstream https-proxy {
    server localhost:8889;
    keepalive 20;
}
server {
    listen 8891;
    location / {
        proxy_pass http://https-proxy;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $http_host;
    }
}

Я предполагаю, что постоянное соединение создается между моими серверами, работающими на одном порту, 8891и 8889это бессмысленно.

Возможно ли сделать nginx proxy и пул постоянных подключений куда угодно? Если нет, то создание такого proxy кажется тривиальным. Так что, возможно, лучшее решение уже существует, о котором я не знаю.

решение1

Вы угадали причину, по которой это не работает так, как задумано. Вы пытаетесь использовать Nginx в качестве прямого прокси-сервера, и хотя это возможно в том виде, в котором вы это сделали, есть много ограничений, поскольку Nginx не предназначен для использования таким образом. Вам следует использовать Squid или даже Apache mod_proxy, который лучше поддерживает прямое прокси-сервер.

НО:

Пробовали ли вы использовать переменную $http_host в определении вышестоящего уровня, гдеподдерживать активностьдиректива? Я почти уверен, что это не сработает, но дайте мне знать :)

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