Heim > Artikel > Betrieb und Instandhaltung > So konfigurieren und verwenden Sie das Proxy-Protokoll in Nginx
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.
$proxy_protocol_addr und $proxy_protocol_port repräsentieren die IP-Adresse des ursprünglichen Clients und die Portnummer.
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.
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.
Real-IP-Module verwenden
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
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.
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!