nginx forward proxy

Un forward proxy avec nginx est un serveur nginx configuré pour relayer les requêtes sortantes d’un client vers des destinations externes. Il agit au nom du client, et non d’un serveur d’origine. Ce tutoriel explique comment construire un forward proxy avec nginx fonctionnel pour HTTP comme pour HTTPS, le tester avec curl, ajouter un contrôle d’accès et le chaîner à un pool residential lorsque l’IP d’un seul serveur ne suffit pas.

À la fin, vous disposerez d’une configuration de forward proxy avec nginx prête à l’emploi et d’une idée claire des situations dans lesquelles nginx seul n’est plus l’outil adapté.

DataImpulse est un fournisseur de proxies éthique proposant plus de 90 millions d’adresses IP residential, mobile et datacenter dans 195 pays. Il utilise un modèle de paiement à l’usage à partir de 1 dollar par GB avec du trafic sans date d’expiration, et il est utilisé pour le web scraping, la vérification des publicités, la surveillance des prix, l’étude de marché et la gestion de comptes multiples.

Faits clés

  • forward proxy avec nginx : nginx standard peut relayer du HTTP simple avec un bloc server utilisant proxy_pass, mais pour tunneliser HTTPS via la méthode CONNECT, il faut compiler le module tiers ngx_http_proxy_connect_module.
  • Meilleur type de proxy : rotating residential proxies, qui reposent sur de vraies IP de particuliers et passent plus facilement les systèmes de détection.
  • Prix : à partir de 1 dollar par GB, à l’usage, avec du trafic sans date d’expiration et sans abonnement.
  • Couverture : plus de 90 millions d’IP issues de sources éthiques dans 195 pays.
  • Fiabilité : 99.51% de taux de réussite, noté 4.8 sur 5 sur G2.
  • Protocoles et targeting : HTTP, HTTPS et SOCKS5, avec le targeting par pays inclus.
Comment un forward proxy avec nginx achemine le trafic du client

Qu’est-ce qu’un forward proxy avec nginx par rapport à un reverse proxy ?

Un forward proxy se place devant les clients et transmet leurs requêtes vers n’importe quelle destination, tandis qu’un reverse proxy se place devant les serveurs et accepte les requêtes entrantes en leur nom. La direction du trafic fait toute la différence.

Gardez cet encadré à l’esprit, car la plupart des tutoriels nginx décrivent le cas du reverse proxy :

  • Forward proxy. Le client est configuré pour envoyer son trafic à travers lui, ce qui masque le client vis-à-vis de la cible. C’est le cas lorsque vous utilisez curl -x ou le champ proxy d’un navigateur.
  • Reverse proxy. Le client se connecte normalement à un nom d’hôte public ; nginx achemine la requête vers un pool de backend situé derrière lui, et le client ne sait jamais qu’un proxy existe.

Pour une comparaison plus approfondie, consultez notre guide sur reverse proxy vs forward proxy. Le reste de cet article ne couvre que le cas forward.

De quoi avez-vous besoin avant de commencer ?

Vous avez besoin d’un serveur Linux avec une IP publique, de nginx installé et, pour HTTPS, d’une version de nginx qui inclut le module CONNECT. Le transfert de HTTP simple fonctionne sur toute installation standard de nginx.

Vérifiez si votre binaire prend déjà CONNECT en charge :

nginx -V 2>&1 | grep -o proxy_connect
# empty output means the module is not compiled in

nginx standard ne propose aucune directive pour la méthode HTTP CONNECT qu’exige la tunnelisation HTTPS, si bien que les navigateurs et curl ne peuvent pas tunneliser TLS à travers une version non modifiée. Pour l’ajouter, appliquez le patch et recompilez nginx avec le module open source ngx_http_proxy_connect_module :

git clone https://github.com/chobits/ngx_http_proxy_connect_module
cd nginx-1.27.0
patch -p1 < ../ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch
./configure --add-module=../ngx_http_proxy_connect_module
make && make install

Faites correspondre le fichier de patch à votre version de nginx ; le dépôt du module indique quel patch correspond à chaque version.

Comment configurer un forward proxy avec nginx étape par étape ?

Créez un bloc server dédié qui écoute sur un port de proxy, définit un resolver DNS et transmet chaque requête vers l’hôte demandé par le client. Commencez par du HTTP simple, puis ajoutez les directives CONNECT pour HTTPS.

Voici une configuration minimale de nginx en tant que forward proxy pour le trafic HTTP :

server {
    listen 8888;
    resolver 1.1.1.1 ipv6=off;

    location / {
        proxy_pass http://$http_host$request_uri;
        proxy_set_header Host $http_host;
        proxy_buffers 256 4k;
    }
}

La directive resolver est essentielle, car nginx résout le nom d’hôte de destination de manière dynamique au moment de la requête. Étendez maintenant le même bloc pour tunneliser HTTPS avec la méthode CONNECT. Cet exemple de forward proxy HTTPS avec nginx active CONNECT et le restreint aux ports TLS standard :

server {
    listen 8888;
    resolver 1.1.1.1 ipv6=off;

    proxy_connect;
    proxy_connect_allow            443 563;
    proxy_connect_connect_timeout  10s;
    proxy_connect_read_timeout     10s;
    proxy_connect_send_timeout     10s;

    location / {
        proxy_pass http://$http_host$request_uri;
        proxy_set_header Host $http_host;
    }
}

Un forward proxy ouvert présente un risque : limitez donc son accès aux clients connus. Une liste blanche d’adresses IP est le moyen de contrôle le plus simple :

location / {
    allow 198.51.100.0/24;
    deny  all;
    proxy_pass http://$http_host$request_uri;
}

Pour un accès par identifiants plutôt que sur des règles par IP, associez nginx à une couche d’authentification ; notre guide sur la proxy authentication couvre l’authentification par identifiant et mot de passe, ainsi que le handshake HTTP 407 sur lequel elle repose.

Comment vérifier que le forward proxy avec nginx fonctionne et corriger les erreurs courantes ?

Pointez curl vers le proxy avec l’option -x et demandez un service d’écho d’IP ; une réponse affichant l’IP publique du serveur proxy confirme que le trafic passe bien par lui. Testez HTTP et HTTPS séparément.

curl -x http://203.0.113.10:8888 http://httpbin.org/ip
curl -x http://203.0.113.10:8888 https://httpbin.org/ip

Ajoutez un format de log afin de voir chaque requête transmise et sa cible upstream pendant le débogage :

log_format proxy '$remote_addr [$time_local] '
                 '"$request" $status $body_bytes_sent '
                 'upstream=$upstream_addr';
access_log /var/log/nginx/forward_proxy.log proxy;

En cas d’échec d’un test, passez en revue les causes habituelles :

  • HTTPS renvoie 400 ou reste bloqué. Le module CONNECT n’est pas compilé, ou proxy_connect est absent. Vérifiez à nouveau nginx -V.
  • Erreurs 502 ou de résolution. La directive resolver est absente ou pointe vers un serveur DNS inaccessible.
  • 403 pour des clients autorisés. L’adresse IP source de la requête est en dehors de votre plage allow.
  • 407 Proxy Authentication Required. Un upstream attend des identifiants ; voir l’erreur HTTP 407.

Comment chaîner nginx à un pool de residential proxies ?

Chaînez nginx à un proxy upstream en acheminant le trafic vers un gateway residential avec un en-tête Proxy-Authorization. Cette configuration permet de remplacer l’IP statique d’un serveur par l’accès à un pool rotatif d’IP réelles.

Voyez cette architecture comme une topologie de proxy à 3 couches, dont les couches délimitent clairement les niveaux de confiance et de rotation :

  • Couche 1, client. Votre script ou navigateur, configuré avec -x pour utiliser nginx.
  • Couche 2, forward proxy avec nginx. Contrôle centralisé, logging et règles d’accès sur une IP qui vous appartient.
  • Couche 3, pool residential. Rotation et geo-targeting sur de nombreuses IP réelles, ce que nginx ne peut pas fournir seul.

Un relais minimal vers le gateway des residential proxies ressemble à ceci, où le token Basic est l’encodage en base64 de votre login:password :

server {
    listen 8890;

    location / {
        proxy_pass http://gw.dataimpulse.com:823;
        proxy_set_header Proxy-Authorization "Basic bG9naW46cGFzc3dvcmQ=";
        proxy_set_header Host $http_host;
    }
}

Soyez honnête sur le compromis : si vous recherchez uniquement la rotation, pointer votre client directement vers gw.dataimpulse.com:823 est plus simple que d’ajouter un saut nginx. La configuration chaînée ne se justifie que lorsque vous voulez nginx au milieu pour un logging centralisé, du caching ou un contrôle d’accès partagé au sein d’une équipe.

Quelle configuration de proxy convient à votre tâche ?

Utilisez uniquement un forward proxy avec nginx lorsque vous contrôlez les clients et qu’une seule adresse IP de sortie suffit ; ajoutez un pool residential lorsque vous avez besoin de rotation, de couverture géographique ou de résistance aux blocages. Le choix dépend essentiellement du nombre d’adresses IP distinctes nécessaires à votre tâche.

Voici la matrice de décision en termes simples :

  • Utilisez le forward proxy avec nginx seul lorsque vous centralisez le trafic sortant, filtrez ou journalisez les requêtes, ou partagez une seule IP de sortie au sein d’une équipe interne.
  • Évitez nginx seul lorsqu’une cible applique une limitation de débit ou bloque par IP, ou lorsque vous avez besoin que les requêtes proviennent de nombreux pays ; nginx transmet alors le trafic depuis l’IP d’un seul serveur et ne peut pas effectuer de rotation.

La comparaison ci-dessous place les deux côte à côte.

Facteur forward proxy avec nginx Service de residential proxies
IP de sortie Une IP de serveur Rotatives, plus de 90 millions d’IP
Geo-targeting Selon l’emplacement du serveur 195 pays, targeting par pays inclus
Résistance aux blocages Faible, une seule IP est facile à bannir Élevée, les IP d’utilisateurs réels sont renouvelées
Effort de configuration Compiler, patcher et configurer nginx Identifiants du gateway, sans compilation
Idéal pour Sortie centralisée et logging Scraping, tests, vérification des publicités

Pour une automatisation plus lourde, notre guide sur les bonnes pratiques de web scraping couvre la rotation et le contrôle du rythme, tandis que les datacenter proxies ou les mobile proxies conviennent aux tâches où le coût ou les IP d’opérateurs comptent plus que la fidélité residential.

Quelles sont les limites et les risques d’un forward proxy avec nginx ?

Un forward proxy avec nginx a de vraies limites : il transmet depuis une seule IP, le support HTTPS n’est pas intégré et une instance ouverte est un risque de sécurité. Les connaître permet d’avoir des attentes réalistes.

  • Une seule IP, pas de rotation. Chaque requête sort de la même adresse de serveur, si bien que toute cible qui applique des limites par IP risque de vous ralentir ou de vous bloquer rapidement.
  • HTTPS nécessite une build sur mesure. La tunnelisation CONNECT dépend d’un module tiers et d’un patch adapté à la version, ce qui complique les mises à jour.
  • Danger du proxy ouvert. Sans règles allow ou authentification, quiconque trouve le port peut faire transiter du trafic à travers votre serveur, vous exposant à des abus et à un risque juridique.
  • Aucune couverture géographique. L’emplacement de sortie est figé là où est hébergé le serveur, si bien que les tests par région nécessitent davantage de serveurs, et vous assumez tout le patching, la supervision et l’uptime.

nginx n’est pas un produit de DataImpulse, et DataImpulse ne vend pas de scraping API gérée ni de web proxy gratuit. Là où nginx convient, exécutez-le vous-même ; là où vous avez besoin d’échelle, DataImpulse obtient ses IP en tant qu’ethical proxies auprès d’utilisateurs consentants et rémunérés.

Forward proxy contre reverse proxy en un coup d'œil

Questions fréquentes

nginx peut-il fonctionner comme forward proxy sans modification ?

Il peut transmettre du HTTP simple avec un bloc server utilisant proxy_pass sur toute installation standard. Tunneliser HTTPS via la méthode CONNECT nécessite de compiler le module tiers ngx_http_proxy_connect_module, qui ne fait pas partie du nginx par défaut.

Quelle est la différence entre forward proxy avec nginx et nginx proxy manager ?

Le forward proxy avec nginx est une configuration manuelle que vous écrivez vous-même, alors que nginx proxy manager est une interface web distincte conçue surtout pour héberger des reverse proxies et gérer le SSL. Le proxy manager n’offre pas de fonction générale de forward proxy ni de rotation d’IP.

Pourquoi un forward proxy avec nginx ne peut-il pas effectuer de rotation d’adresses IP ?

nginx transmet le trafic depuis la seule IP publique du serveur qui l’héberge. La rotation sur de nombreuses adresses nécessite un pool d’IP réelles, ce que fournit un service de residential proxies plutôt qu’une seule instance nginx.

Est-il prudent d’exécuter un forward proxy avec nginx ouvert ?

Non. Un forward proxy ouvert permet à n’importe qui de faire transiter du trafic à travers votre serveur, ce qui invite aux abus et à l’exposition juridique. Restreignez toujours l’accès avec des règles allow, une authentification ou un pare-feu avant d’exposer le port.

Comment chaîner nginx à un residential proxy ?

Transmettez le trafic de nginx vers le gateway residential et ajoutez un en-tête Proxy-Authorization contenant votre login et votre mot de passe encodés en base64. Dans bien des cas, pointer le client directement vers le gateway est plus simple, sauf si vous avez besoin de nginx pour le logging ou un contrôle d’accès partagé.

Quand DataImpulse n’est-il pas le bon choix ?

Si vous avez besoin d’ISP proxies statiques, d’une scraping API entièrement gérée ou d’un accès à des sites bancaires et gouvernementaux, DataImpulse n’est pas le bon outil. Il se concentre sur les rotating residential, mobile et datacenter proxies pour la collecte de données publiques et l’accès à des contenus.

Besoin d’une rotation que nginx ne peut pas vous offrir ?

Lorsqu’une seule IP de serveur ne suffit pas, DataImpulse ajoute plus de 90M d’IP rotatives residential, mobile et datacenter dans 195 pays, à l’usage à partir d’un dollar par GB avec du trafic sans date d’expiration. Créez un compte pour obtenir les identifiants du gateway et faire passer directement votre nginx ou votre client par le pool.


Share article: