Maison  >  Article  >  Opération et maintenance  >  Comment configurer et utiliser le protocole proxy dans nginx

Comment configurer et utiliser le protocole proxy dans nginx

王林
王林avant
2023-05-18 08:47:262800parcourir

    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;
            #...
        }
    }

    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'

    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

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

    --with-http_realip_module

    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;
       #...
    }

    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;
          }
    }

    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;
    }
    stream {
        server {
            listen 12345;
            proxy_pass example.com:12345;
            proxy_protocol on;
        }
    }

    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"';
    }
    stream {
        #...
        log_format basic '$proxy_protocol_addr - $remote_user [$time_local] '
                          '$protocol $status $bytes_sent $bytes_received '
                          '$session_time';
    }

    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!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer