Detaillierte Erläuterung des Prozesses, mit dem Nginx die echte Quell-IP erhält, nachdem mehrere Proxy-Ebenen durchlaufen wurden

Detaillierte Erläuterung des Prozesses, mit dem Nginx die echte Quell-IP erhält, nachdem mehrere Proxy-Ebenen durchlaufen wurden

Frage

Nginx nimmt $remote_addr als echte IP-Adresse, aber tatsächlich ist $http_X_Forwarded_For die echte IP-Adresse des Benutzers und $remote_addr nur die Adresse der oberen Schicht des Proxys.

Lösung:

HTTP-Modul hinzufügen

set_real_ip_from 172.17.10.125; #Die obere Proxy-IP-Adresse real_ip_header X-Forwarded-For;
real_ip_recursive ein;

Starten Sie nach dem Hinzufügen nginx und melden Sie einen Fehler:

nginx: [emerg] unbekannte Anweisung „set_real_ip_from“ in /home/lnidmp/nginx/conf/nginx.conf:26

Sie müssen das Realip-Modul hinzufügen und Nginx neu kompilieren.

1. cd /usr/local/nginx-1.15.12

2. ./configure --prefix=/usr/cmcc/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module

3. make und make install

Freundliche Tipps:

1. set_real_ip_from bedeutet, die echte Benutzer-IP zu akzeptieren, von der der vertrauenswürdige Proxy

2. real_ip_header bezieht sich auf den HTTP-Header der empfangenen Nachricht, um die vom vorherigen Proxy gesendete Benutzer-IP abzurufen

3. real_ip_recursive: Gibt an, ob rekursiv ausgeschlossen werden soll, bis die Benutzer-IP abgerufen wird (Standard ist deaktiviert)

Zunächst gibt real_ip_header einen HTTP-Headernamen an, der Standardwert ist X-Real-Ip. Vorausgesetzt, der Standardwert wird verwendet, überprüft nginx nach Erhalt der Nachricht den HTTP-Header X-Real-Ip.

(1) Wenn eine IP vorhanden ist, wird geprüft, ob die IP des Absenders in der durch set_real_ip_from angegebenen Liste vertrauenswürdiger IPs enthalten ist. Wenn es vertrauenswürdig ist, wird es denken, dass der IP-Wert in X-Real-Ip der echte IP-Wert des Benutzers ist, der ihm vom Front-Proxy mitgeteilt wurde, und wird den Wert daher seiner eigenen Variable $remote_addr zuweisen. Wenn es nicht vertrauenswürdig ist, wird es nicht verarbeitet und $remote_addr ist weiterhin die IP-Adresse des Absenders.

(2) Wenn X-Real-Ip beispielsweise mehrere IP-Werte besitzt, wird der vorherige Proxy folgendermaßen gesetzt: proxy_set_header X-Real-Ip $proxy_add_x_forwarded_for;

Sie erhalten eine Zeichenfolge aus IPs. Der Wert von real_ip_recursive ist daher entscheidend. Nginx vergleicht die IPs in der Vertrauensliste von set_real_ip_from von rechts nach links in der IP-Liste.

Wenn real_ip_recursive deaktiviert ist und die IP ganz rechts als vertrauenswürdige IP erkannt wird, wird die nächste IP (die zweite von rechts) als echte IP des Benutzers betrachtet.

Wenn real_ip_recursive aktiviert ist, werden die IP-Adressen von rechts nach links verglichen, bis eine nicht vertrauenswürdige IP-Adresse gefunden wird.

Kopieren Sie dann den IP-Wert auch nach $remote_addr.

Die Produktionskonfigurationsdatei von nginx lautet wie folgt:

Benutzer www;
Arbeiterprozesse 10;
Arbeiter_rlimit_nofile 51200;

#error_log Protokolle/Fehler.log;
#error_log Protokolle/error.log Hinweis;
#error_log Protokolle/error.log-Info;
Fehlerprotokoll /data/logs/nginx_error.log crit;

#pid-Protokolle/nginx.pid;


Ereignisse {
 verwenden Sie epoll;
 Arbeiterverbindungen 51200;
}

http {
 mime.types einschließen;
 Standardtyp Anwendung/Oktett-Stream;

 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 # '$status $body_bytes_sent "$http_referer" '
 # '"$http_user_agent" "$http_x_forwarded_for"';

 #access_log Protokolle/access.log Haupt;

 Servernamen_Hash_Bucket_Größe 128;
 Server-Tokens aus;
 läuft in 1 Stunde ab;
 Sendfile aus; 
 tcp_nopush ein;
 Zeitüberschreitung bei fastcgi_connect_timeout: 1200 s;
 fastcgi_send_timeout 1200s;
 fastcgi_read_timeout 1200s;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 8 128k;#8 128
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 KeepAlive-Timeout 65;
 tcp_nodelay ein;
 Fehlerseite 404 /; 
 gzip an;
 gzip_min_länge 2048;
 gzip_puffer 4 16k;
 gzip_http_version 1.1;
 gzip_types Text/einfaches CSS HTML-Anwendung/Xml-Anwendung/X-Javascript;

 set_real_ip_from die obere Proxy-IP-Adresse;
 real_ip_recursive ein;
 real_ip_header X-Weitergeleitet-Für;

 log_format Zugriff '$remote_addr - $remote_user [$time_local] "$request" '
       '$status $body_bytes_sent "$http_referer" '
       '"$http_user_agent" $http_x_forwarded_for';
##################### enthalten ##############################################

schließen Sie conf.d/*.conf ein;
}

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • So implementieren Sie die domänenübergreifende API-Proxy-Weiterleitung über die Nginx-Proxy-Weiterleitungskonfiguration
  • Detaillierte Erklärung zum Hinzufügen eines Nginx-Proxys mit Go
  • So fügen Sie eine Nginx-Proxy-Konfiguration hinzu, um nur internen IP-Zugriff zuzulassen
  • Implementierung zum Entfernen des Präfixes aus der Nginx-Proxy-Pass-Konfiguration
  • 18 Tipps zur Konfiguration des Nginx-Proxy-Cache, die Betreiber kennen müssen (welche kennen Sie?)
  • Detaillierte Erläuterung zweier Möglichkeiten zur Implementierung der Sitzungspersistenz im Nginx-Reverse-Proxy
  • Implementierung der Multi-Port-Zuordnung des Nginx-Reverse-Proxys
  • Diagramm des Prozesses zur Implementierung eines Richtungsproxys durch Nginx

<<:  So verwenden Sie vue.js zum Implementieren der Drag & Drop-Funktion

>>:  Grundlegendes zu MySQL-Sperren basierend auf Update-SQL-Anweisungen

Artikel empfehlen

Vue implementiert die Bottom-Query-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Das WeChat-Applet realisiert eine Links-Rechts-Verknüpfung

In diesem Artikel wird der spezifische Code für d...

Beispielcode zur Implementierung der Ellipsenbahnrotation mit CSS3

In letzter Zeit müssen folgende Effekte erzielt w...

HTML-Grundlagen-Zusammenfassungsempfehlung (Textformat)

HTML-Tags zur Textformatierung 標簽 描述 <b> 定義...

Detaillierte Erklärung der Lösung für den 404-Fehler von Tomcat

Das 404-Problem tritt im Tomcat-Test auf. Die Pro...

Die Verbindung zwischen JavaScript-Konstruktoren und Prototypen

Inhaltsverzeichnis 1. Konstrukteure und Prototype...

MySQL-Unterabfrage und Details zur Verknüpfungstabelle

Inhaltsverzeichnis 1. Was ist eine Unterabfrage? ...

Lösung für den Fehler beim Starten von MySQL

Lösung für den Fehler beim Starten von MySQL MySQ...

Kenntnisse über die MySQL Memory-Speicher-Engine

Wissenspunkte zur Speicher-Storage-Engine Die Spe...

Analyse des MySQL-Beispiels DTID Master-Slave-Prinzip

Inhaltsverzeichnis 1. Grundkonzepte von GTID 2. G...