Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So konfigurieren und verwenden Sie das Proxy-Protokoll in Nginx

So konfigurieren und verwenden Sie das Proxy-Protokoll in Nginx

王林
王林nach vorne
2023-05-18 08:47:262798Durchsuche

    Das Proxy-Protokoll wird in Nginx angewendet. Wir wissen, dass Nginx ein Webserver und ein Proxy-Server ist. Es funktioniert normalerweise hinter einem Proxy-Server oder einer Lastausgleichssoftware (Haproxy, Amazon Elastic Load Balancer (ELB)). Zunächst initiiert der Client eine Anfrage an den Proxyserver oder die Lastausgleichssoftware, und dann wird die Anfrage für den tatsächlichen Webzugriff an Nginx weitergeleitet. Da sie mehrere Softwareebenen durchlaufen hat, werden einige Informationen des Clients, z B. IP-Adresse, Portnummer usw., kann es für unsere Problemanalyse und Datenstatistik schädlich sein, die tatsächliche IP-Adresse des Clients zu erhalten, um die genaue Anforderungsumgebung zu erhalten Wenn der zuvor erwähnte Proxy oder LSB das PROXY-Protokoll implementiert, unabhängig davon, ob es sich um HTTP-, SSL-, HTTP/2-, SPDY-, WebSocket- oder TCP-Protokoll handelt, kann Nginx die ursprüngliche IP-Adresse des Clients abrufen und einige ausführen Spezielle Operationen, die auf der ursprünglichen IP-Adresse basieren, wie das Blockieren des Zugriffs von bösartigen IPs, das Anzeigen verschiedener Sprachen oder Seiten basierend auf unterschiedlichen IPs oder einfachere Protokollierung und Statistiken, sind allesamt sehr effektiv

    Natürlich, wenn Sie möchten Wenn Sie das PROXY-Protokoll unterstützen, müssen Sie die Nginx-Version verwenden. Die spezifischen Versionsanforderungen lauten wie folgt:

    Wenn Sie das PROXY-Protokoll v2 unterstützen möchten, benötigen Sie NGINX Plus R16 oder NGINX Open Source 1.13. 11.

    Wenn Sie das ROXY-Protokoll für HTTP unterstützen möchten, benötigen Sie NGINX Plus R3 oder NGINX Open Source 1.5.12.

      Um das TCP-Client-seitige PROXY-Protokoll zu unterstützen, benötigen Sie NGINX Plus R7 oder NGINX Open Source 1.9 .3 ist erforderlich.
    • Zur Unterstützung des PROXY-Protokolls für TCP, NGINX Plus R11 oder NGINX Open Source 1.11.4
    • In nginx können Sie die entsprechenden Client-Informationen über die folgenden Variablen erhalten, insbesondere wie folgt:
    • $proxy_protocol_addr und $proxy_protocol_port repräsentieren die IP-Adresse des ursprünglichen Clients und die Portnummer.

    • $remote_addr und $remote_port repräsentieren die IP-Adresse und den Port des Load Balancers.
    • Wenn Sie das RealIP-Erweiterungsmodul verwenden, dann ist dies der Fall Das Modul schreibt die beiden Werte von $remote_addr und $remote_port neu. Sie werden durch die IP-Adresse und Portnummer des ursprünglichen Clients ersetzt.

    • Dann verwenden Sie $realip_remote_addr und $realip_remote_port, um die IP-Adresse und den Port des Load Balancers darzustellen.

    Im RealIP-Erweiterungsmodul bleibt die Bedeutung von $proxy_protocol_addr und $proxy_protocol_port unverändert, d. h. weiterhin die IP-Adresse und Portnummer des ursprünglichen Clients.

    Proxy-Protokoll in Nginx konfigurieren und verwenden

    Wir haben oben die grundlegende Anwendung des Proxy-Protokolls in Nginx erwähnt. Lassen Sie uns darüber sprechen, wie Sie eine bestimmte Konfiguration in Nginx durchführen.

    Aktivieren Sie das Proxy-Protokoll in Nginx.

    Wenn es sich bei Ihrem Nginx bereits um eine Version handelt, die das Proxy-Protokoll unterstützt, ist die Aktivierung des Proxy-Protokolls sehr einfach. Sie müssen nur das Proxy-Protokoll zum Abhören auf dem Server hinzufügen, wie unten gezeigt:

    http {
        #...
        server {
            listen 80   proxy_protocol;
            listen 443  ssl proxy_protocol;
            #...
        }
    }
       
    stream {
        #...
        server {
            listen 112233 proxy_protocol;
            #...
        }
    }

    Alle Der bekanntere ist der http-Block. In Nginx steht er für die Unterstützung von http/https. Nginx bietet Unterstützung für das TCP/UDP-Protokoll. Diese Funktion wird über das Stream-Modul implementiert, was vielen Menschen relativ unbekannt ist.

    Durch die obige Konfiguration kann Nginx das Proxy-Protokoll sowohl im TCP/UDP-Protokoll als auch im http/https-Protokoll unterstützen.

    Real-IP-Module verwenden

    Real-IP-Module sind ein Modul, das mit Nginx geliefert wird. Sie können überprüfen, ob Nginx ein Real-IP-Modul installiert hat, indem Sie den folgenden Befehl ausführen:

    nginx -V 2>&1 | grep -- 'http_realip_module'
    nginx -V 2>&1 | grep -- 'stream_realip_module'

    Wenn die Version, die Sie derzeit verwenden, nicht vorhanden ist Sie haben eine echte IP. Keine Sorge, möglicherweise müssen Sie zu diesem Zeitpunkt aus dem Quellcode kompilieren.

    Während des Kompilierungsprozesses müssen wir einen Konfigurationsbefehl ausführen. In diesem Konfigurationsbefehl können wir die zu aktivierenden Funktionen angeben, z. B. Stream oder 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

    Wenn Sie die Real-IP-Funktion aktivieren möchten kann hinzufügen:

    --with-http_realip_module

    Wenn Nginx hinter SLB oder Proxy ausgeführt wird, können Sie den Befehl set_real_ip_from verwenden, um den IP-Bereich des Proxy- oder Lastausgleichsservers anzugeben, wie unten gezeigt:

    server {
        #...
        set_real_ip_from 192.168.1.0/24;
       #...
    }

    Dann müssen wir die IP-Adresse von ersetzen der Proxy oder SLB mit der Adresse des echten Clients, dann kann es wie folgt verwendet werden:

    http {
        server {
            #...
            real_ip_header proxy_protocol;
          }
    }

    Anforderungsweiterleitung

    Ob es sich um einen HTTP- oder Stream-Block handelt, kann es vorkommen, dass die Anforderung an den nachfolgenden Upstream weitergeleitet wird. Für den Upstream hoffen sie, die echte Client-IP-Adresse zu erhalten. Anstelle der Proxy- oder SLB-Adresse kann dies durch die folgenden Einstellungen gelöst werden:

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

    Die Einstellungen von http und Stream sind unterschiedlich.

    Protokollierung

    Protokoll ist eine sehr wichtige Funktion, um Probleme zu lokalisieren und statistische Analysen von Daten durchzuführen. Natürlich benötigen wir die echte Client-IP-Adresse.

    Wir können die entsprechenden Protokolle im http- und Stream-Block aufzeichnen, indem wir die Variable $proxy_protocol_addr verwenden, wie unten gezeigt:

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

    Das obige ist der detaillierte Inhalt vonSo konfigurieren und verwenden Sie das Proxy-Protokoll in Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen