Proxy de grupo de conexiones persistentes universal con nginx

Proxy de grupo de conexiones persistentes universal con nginx

El problema que tengo es que hay literalmente 100 servidores remotos diferentes que siguen cambiando. Me conecto a estos con PHP usando curl, ese proceso PHP muere una vez finalizado y no hay forma de mantener la conexión abierta. Con mis conocimientos actuales, tendría que configurar todos y cada uno de ellos en la configuración de nginx. Lo siguiente funciona para un servidor:

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 "";
    }
}

El único problema que existe es que en el sentido ascendente some-server.comestá codificado y no puede ser una variable.

El siguiente es mi intento de hacer una versión universal del mismo. Hace proxy correctamente pero no mantendrá un grupo de conexiones persistentes al servidor remoto:

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;
    }
}

Supongo que la conexión persistente se agrupa entre mis servidores que se ejecutan en el puerto 8891y 8889lo cual no tiene sentido.

¿Es posible hacer proxy nginx y agrupar conexiones persistentes a cualquier lugar? Si no, hacer tal proxy parece trivial. Entonces, tal vez ya exista una solución mejor de la que no tengo conocimiento.

Respuesta1

Adivinó correctamente la razón por la cual no funciona como se esperaba. Está intentando utilizar Nginx como proxy de reenvío y, aunque es posible de la forma en que lo hizo, existen muchas limitaciones ya que Nginx no está diseñado para usarse de esa manera. Deberías usar Squid o incluso Apache mod_proxy, que tiene mejor soporte para proxy directo.

PERO:

¿Ha intentado utilizar la variable $http_host en la definición ascendente, donde elmantener vivadirectiva es? Estoy casi seguro de que no funcionará, pero házmelo saber :)

información relacionada