Proxy de pool de conexão persistente universal com nginx

Proxy de pool de conexão persistente universal com nginx

O problema que tenho é que existem literalmente 100 servidores remotos diferentes que estão sempre mudando. Eu me conecto a eles com PHP usando curl, esse processo PHP morre após a conclusão e não há como manter a conexão aberta. Com meu conhecimento atual eu teria que configurar cada um deles na configuração do nginx. O seguinte funciona para um 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 "";
    }
}

O único problema é que no upstream some-server.comé codificado e não pode ser uma variável.

A seguir está minha tentativa de fazer uma versão universal do mesmo. Ele faz proxy corretamente, mas não mantém um pool de conexões persistentes com o 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;
    }
}

Meu palpite é que a conexão persistente está agrupada entre meus servidores em execução na porta 8891e 8889isso é inútil.

É possível fazer proxy nginx e agrupar conexões persistentes para qualquer lugar? Caso contrário, criar tal proxy parece trivial. Então, talvez já exista uma solução melhor da qual não conheço.

Responder1

Você adivinhou o motivo pelo qual não funciona conforme o esperado. Você está tentando usar o Nginx como um proxy de encaminhamento e, embora seja possível do jeito que você fez, há muitas limitações, pois o Nginx não foi projetado para ser usado dessa forma. Você deve usar o Squid ou mesmo o Apache mod_proxy, que tem melhor suporte para proxy direto.

MAS:

Você já tentou usar a variável $http_host na definição upstream, onde omantenha vivodiretiva é? Tenho quase certeza de que não vai funcionar, mas me avise :)

informação relacionada