Comment configurer nginx pour agir comme équilibreur de charge pour les proxys?

Je suis conscient que nginx peut être configuré pour agir en tant qu’équilibreur de charge, mais je me demande s’il est possible de charger l’équilibre entre les proxy. Disons que j’ai plusieurs proxys en cours d’exécution sur localhost, et je veux utiliser nginx pour fournir un seul sharepoint connexion afin que je puisse effectuer une rotation entre les proxys. J’essaie d’obtenir quelque chose de similaire à l’article ici , qui utilise HAProxy au lieu de nginx. J’ai le nginx.conf suivant:

 events { } http { upstream proxies { server localhost:9998; server localhost:9999; server localhost:10000; } server { listen 8080; location / { proxy_pass http://proxies; } } } 

Cependant, quand j’envoie une requête curl comme ceci:

 curl http://icanhazip.com -x localhost:8080 

Il ignore l’URL et j’obtiens une réponse similaire à celle à laquelle je m’attendrais si j’avais envoyé directement une demande à l’un des serveurs proxy comme suit:

 curl localhost:9999 

Bien sûr, je ne m’attendais pas vraiment à ce que cela fonctionne, car il doit y avoir une option pour dire à nginx de traiter les serveurs en amont comme des proxys eux-mêmes. Cependant, je n’ai pas pu trouver comment faire cela après avoir effectué une recherche en ligne.

comme vous pouvez le voir dans votre post haproxy haproxy akt comme un proxy direct

option http_proxy

Ce que signifie cette option est décrit dans le manuel https://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4-option%20http_proxy

Il arrive parfois que des personnes aient besoin d’un proxy HTTP pur qui comprenne les requêtes proxy de base sans mise en cache ni aucune fonctionnalité sophistiquée. Dans ce cas, il peut être utile de configurer une instance HAProxy avec l’ensemble “option http_proxy”. Dans ce mode, aucun serveur n’est déclaré et la connexion est transmise à l’adresse IP et au port trouvés dans l’URL après le schéma “http: //”.

Aucune résolution d’adresse d’hôte n’est effectuée, donc cela ne fonctionne que lorsque les adresses IP pures sont transmises. Le périmètre d’utilisation de cette option étant plutôt limité, il ne sera probablement utilisé que par des experts sachant qu’ils en ont exactement besoin. Ceci est incompatible avec le mode tunnel HTTP.

Pour autant que je sache, nginx n’a pas cette fonctionnalité.

Une question similaire c’est cela. https://superuser.com/questions/604352/nginx-as-forward-proxy-for-https

Pourquoi ne pouvez-vous pas utiliser le haproxy comme décrit dans la publication de votre lien?

Les documents nginx indiquent que les stream amont sont dissortingbués selon une méthode de round robin.

Par défaut, les requêtes sont réparties entre les serveurs à l’aide d’une méthode d’équilibrage pondérée à tour de rôle

https://nginx.org/en/docs/http/ngx_http_upstream_module.html

Vous devez configurer la règle d’équilibrage de la charge pour les proxies pondérés ou autres

quelque chose comme max_fails = 1 fail_timeout = 10s;

  Can you put max_fails =1 and fail_timeout=10s; after the proxies server localhost:9998 max_fails =1 and fail_timeout=10s; server localhost:9999 max_fails =1 and fail_timeout=10s; server localhost:10000 max_fails =1 and fail_timeout=10s; change location /{ to location @proxy{