Maison > Opération et maintenance > Nginx > le corps du texte

Comment configurer et utiliser le protocole proxy dans nginx

王林
Libérer: 2023-05-18 08:47:26
avant
2798 Les gens l'ont consulté

    le protocole proxy est appliqué dans nginx

    Nous savons que nginx est un serveur Web et un serveur proxy. Il fonctionne généralement derrière un serveur proxy ou un logiciel d'équilibrage de charge (Haproxy, Amazon Elastic Load Balancer (ELB)

    ). Tout d'abord, le client initie une requête au serveur proxy ou au logiciel d'équilibrage de charge, puis la requête sera transmise à nginx pour un accès réel au Web

    Parce qu'elle a traversé plusieurs couches de logiciel, certaines informations du client telles que. car l'adresse IP, le numéro de port, etc. peuvent être perdus. Le fait d'être masqué est préjudiciable à notre analyse des problèmes et à nos statistiques de données. Nous espérons obtenir la véritable adresse IP du client afin d'obtenir l'environnement de demande précis. Vous devez utiliser le protocole PROXY. Si le proxy ou LSB mentionné précédemment implémente le protocole PROXY, qu'il s'agisse du protocole HTTP, SSL, HTTP/2, SPDY, WebSocket ou TCP, nginx peut obtenir l'adresse IP d'origine du client et effectuer certaines tâches. les opérations basées sur l'adresse IP d'origine. Les opérations spéciales, telles que le blocage de l'accès à des adresses IP malveillantes, l'affichage de différentes langues ou pages en fonction de différentes adresses IP, ou une journalisation et des statistiques plus simples, sont toutes très efficaces

    Bien sûr, si vous le souhaitez. prend en charge le protocole PROXY, vous devez utiliser la version nginx. Il existe également des exigences spécifiques en matière de version :

    Si vous souhaitez prendre en charge le protocole PROXY v2, vous avez besoin de NGINX Plus R16 ou NGINX Open Source 1.13. 11.

    • Si vous souhaitez prendre en charge le protocole ROXY pour HTTP, vous avez besoin de NGINX Plus R3 ou NGINX Open Source 1.5.12

    • Pour prendre en charge le protocole PROXY côté client TCP, NGINX Plus R7 ou NGINX Open Source 1.9. .3 est requis.

    • Pour prendre en charge le protocole PROXY pour TCP, NGINX Plus R11 ou NGINX Open Source 1.11.4

    • Dans nginx, vous pouvez obtenir les informations client correspondantes via les variables suivantes, en particulier comme suit :

    • $proxy_protocol_addr et $proxy_protocol_port représentent respectivement l'adresse IP du client d'origine et le numéro de port

    $remote_addr et $remote_port représentent l'adresse IP et le port de l'équilibreur de charge

    Si vous utilisez le module d'extension RealIP, alors ceci. Le module réécrira les deux valeurs​​de $remote_addr et $remote_port. Il sera remplacé par l'adresse IP et le numéro de port du client d'origine.

    Utilisez ensuite $realip_remote_addr et $realip_remote_port pour représenter l'adresse IP et le port de l'équilibreur de charge.

    Dans le module d'extension RealIP, la signification de $proxy_protocol_addr et $proxy_protocol_port reste inchangée, qui est toujours l'adresse IP et le numéro de port du client d'origine.

    Configurer et utiliser le protocole proxy dans nginx

    Nous avons mentionné ci-dessus l'application de base du protocole proxy dans nginx. Parlons de la façon d'effectuer une configuration spécifique dans nginx.

    Activer le protocole proxy dans nginx

    Si votre nginx est déjà une version qui prend en charge le protocole proxy, alors l'activation du protocole proxy est très simple. Il vous suffit d'ajouter proxy_protocol à l'écoute sur le serveur, comme indiqué ci-dessous :

    http {
        #...
        server {
            listen 80   proxy_protocol;
            listen 443  ssl proxy_protocol;
            #...
        }
    }
       
    stream {
        #...
        server {
            listen 112233 proxy_protocol;
            #...
        }
    }
    Copier après la connexion

    Tout le monde. Le plus connu est le bloc http Dans nginx, il représente la prise en charge de http/https. Nginx prend en charge le protocole TCP/UDP. Cette fonction est implémentée via le module stream, que beaucoup de gens ne connaissent pas.

    Grâce à la configuration ci-dessus, nginx peut prendre en charge le protocole proxy dans le protocole tcp/udp et le protocole http/https.

    Utiliser les modules Real‑IP

    Les modules Real‑IP sont un module fourni avec nginx. Vous pouvez vérifier si nginx a un module real-ip installé en exécutant la commande suivante :

    nginx -V 2>&1 | grep -- 'http_realip_module'
    nginx -V 2>&1 | grep -- 'stream_realip_module'
    Copier après la connexion

    Si la version que vous utilisez actuellement ne le fait pas. avoir une vraie adresse IP, ne vous inquiétez pas, vous devrez peut-être compiler à partir du code source pour le moment.

    Pendant le processus de compilation, nous devons exécuter une commande configure. Dans cette commande configure, nous pouvons spécifier les fonctions à activer, telles que stream ou http_ssl_module :

    $ ./configure
    --sbin-path=/usr/local/nginx/nginx
    --conf-path=/usr/local/nginx/nginx.conf
    --pid-path=/usr/local/nginx/nginx.pid
    --with-pcre=../pcre-8.44
    --with-zlib=../zlib-1.2.11
    --with-http_ssl_module
    --with-stream
    --with-mail
    Copier après la connexion

    Si vous souhaitez activer la fonction real-ip, vous peut ajouter :

    --with-http_realip_module
    Copier après la connexion

    Si nginx s'exécute derrière SLB ou proxy, vous pouvez utiliser la commande set_real_ip_from pour spécifier la plage IP du proxy ou du serveur d'équilibrage de charge, comme indiqué ci-dessous :

    server {
        #...
        set_real_ip_from 192.168.1.0/24;
       #...
    }
    Copier après la connexion

    Ensuite, nous devons remplacer l'adresse IP de le proxy ou SLB avec l'adresse du vrai client, alors vous pouvez l'utiliser comme ceci :

    http {
        server {
            #...
            real_ip_header proxy_protocol;
          }
    }
    Copier après la connexion

    Redirection de demande

    Qu'il s'agisse de http ou d'un bloc de flux, vous pouvez rencontrer une situation où la demande est transmise à l'amont suivant. Pour l'amont, ils espèrent recevoir la véritable adresse IP du client, au lieu de l'adresse du proxy ou du slb, cela peut être résolu par les paramètres suivants :

    http {
        proxy_set_header X-Real-IP       $proxy_protocol_addr;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
    }
    Copier après la connexion
    stream {
        server {
            listen 12345;
            proxy_pass example.com:12345;
            proxy_protocol on;
        }
    }
    Copier après la connexion

    Les paramètres de http et de stream sont différents.

    Logging

    Log est une fonction très importante. Elle est très utile pour localiser les problèmes et effectuer une analyse statistique des données. Bien sûr, ce dont nous avons besoin, c'est de la véritable adresse IP du client.

    Nous pouvons enregistrer les logs correspondants dans le bloc http et stream en utilisant la variable $proxy_protocol_addr, comme indiqué ci-dessous :

    http {
        #...
        log_format combined '$proxy_protocol_addr - $remote_user [$time_local] '
                            '"$request" $status $body_bytes_sent '
                            '"$http_referer" "$http_user_agent"';
    }
    Copier après la connexion
    stream {
        #...
        log_format basic '$proxy_protocol_addr - $remote_user [$time_local] '
                          '$protocol $status $bytes_sent $bytes_received '
                          '$session_time';
    }
    Copier après la connexion

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!