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

Reines HTML+CSS, um einen Element-Ladeeffekt zu erzielen

Dies ist der Effekt der Element-UI-Ladekomponente...

Verwenden des JS-Timers zum Verschieben von Elementen

Verwenden Sie einen JS-Timer, um ein Element zu e...

Zusammenfassung der Linux Logical Volume Management (LVM)-Nutzung

Die Verwaltung des Speicherplatzes ist für System...

So verwenden Sie Lottie-Animationen in React Native-Projekten

Lottie ist eine von Airbnb entwickelte Open-Sourc...

Vier Lösungen für die Verwendung von setTimeout in JS for-Schleifen

Inhaltsverzeichnis Überblick Lösung 1: Verschlüss...

So installieren Sie MySQL unter Linux (Yum und Quellcode-Kompilierung)

Es gibt zwei Möglichkeiten, MySQL unter Linux zu ...