![Proxy de pool de conexão persistente universal com nginx](https://rvso.com/image/718154/Proxy%20de%20pool%20de%20conex%C3%A3o%20persistente%20universal%20com%20nginx.png)
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 8891
e 8889
isso é 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 :)