Die Geo-Direktive wird vom Modul ngx_http_geo_module bereitgestellt. Standardmäßig lädt Nginx dieses Modul, es sei denn, --without-http_geo_module wird manuell konfiguriert. Mit dem Modul
ngx_http_geo_module können Variablen erstellt werden, deren Werte von der IP-Adresse des Clients abhängen.
geo-Befehl
Syntax: geo [$address] $variable { ... }
Standardwert: —
Konfigurationsabschnitt: http
Definition zum Abrufen der IP-Adresse des Clients aus der angegebenen Variablen. Standardmäßig erhält nginx die Client-IP-Adresse aus der Variablen $remote_addr, sie kann jedoch auch aus anderen Variablen bezogen werden. Zum Beispiel
geo $remote_addr $geo { default 0; 127.0.0.1 1; } geo $arg_ttlsa_com $geo { default 0; 127.0.0.1 1; }
Wenn der Wert dieser Variablen keine legale IP-Adresse darstellt, verwendet Nginx die Adresse „255.255.255.255“.
nginx beschreibt die Adresse über cidr oder Adresssegment und unterstützt die folgenden Parameter:
delete: Löschen Sie das angegebene Netzwerk.
Wenn die Client-Adresse mit keiner definierten Adresse übereinstimmen kann, verwendet nginx den Standardwert. CIDR kann „0.0.0.0/0“ verwenden, um den Standardwert zu ersetzen.
include: Enthält eine Datei, die Adressen und Werte definiert und mehrere enthalten kann.
Proxy: Definieren Sie vertrauenswürdige Adressen. Wenn die Anfrage von einer vertrauenswürdigen Adresse kommt, erhält Nginx die Adressinformationen mithilfe seines „X-Forwarded-For“-Headers. Im Vergleich zu gewöhnlichen Adressen werden vertrauenswürdige Adressen nacheinander erkannt.
proxy_recursive: Rekursive Adresssuche aktivieren. Wenn die rekursive Suche deaktiviert ist, verwendet Nginx die letzte Adresse in „x-forwarded-for“ anstelle der ursprünglichen Client-Adresse, wenn die Client-Adresse mit einer vertrauenswürdigen Adresse übereinstimmt. Wenn die rekursive Suche aktiviert ist und die Client-Adresse mit einer vertrauenswürdigen Adresse übereinstimmt, verwendet Nginx die letzte Adresse in „x-forwarded-for“, die keiner vertrauenswürdigen Adresse entspricht, um die ursprüngliche Client-Adresse zu ersetzen.
Bereiche: Definieren Sie die Adresse in Form eines Adresssegments. Dieser Parameter muss zuerst platziert werden. Um das Laden der Adressbibliothek zu beschleunigen, sollten Adressen in aufsteigender Reihenfolge definiert werden.
geo $country { default zz; include conf/geo.conf; delete 127.0.0.0/16; proxy 192.168.100.0/24; proxy 2001:0db8::/32; 127.0.0.0/24 us; 127.0.0.1/32 ru; 10.1.0.0/16 ru; 192.168.1.0/24 uk; }
vim conf/geo.conf
10.2.0.0/16 ru; 192.168.2.0/24 ru;
Adresssegmentbeispiel:
geo $country { ranges; default zz; 127.0.0.0-127.0.0.0 us; 127.0.0.1-127.0.0.1 ru; 127.0.0.1-127.0.0.255 us; 10.1.0.0-10.1.255.255 ru; 192.168.1.0-192.168.1.255 uk; }
Der Geo-Befehl weist Variablen hauptsächlich Werte basierend auf IP zu. Daher können unter dem Geoblock nur IP- oder Netzwerksegmente definiert werden, andernfalls wird ein Fehler gemeldet. Das Geo-Modul implementiert den globalen Lastausgleich
Testmaschine 2 IP: 192.168.6.8Testmaschine 3 IP: 192.168.6.189
1. Kompilieren und installieren Sie Nginx auf jedem Server, mehr verrate ich nicht! Ich habe die Konfigurationen von Server1 und Server2 nicht geändert ~ ich habe nur deren Homepage geändert, was zum Testen hilfreich ist!
Server1:
shell $> cd /usr/local/nginx/html shell $> rm index.html shell $> echo "192.168.6.101" > index.html
shell $> cd /usr/local/nginx/html shell $> rm index.html shell $> echo "192.168.6.102" > index.html
shell $> /usr/local/nginx/sbin/nginx
shell $> cd /usr/local/nginx/conf/ shell $> vim nginx.conf
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; geo $geo { default default; 192.168.6.189/32 uk; 192.168.6.8/32 us; #这里的子网码是 32 是因为,我是单网段测试,如果你有vlan,你可以是24 例如 # 192.168.0.0/24 tw } upstream uk.server { server 192.168.6.101; } upstream us.server { server 192.168.6.102; } upstream default.server { server 192.168.6.121:8080; } sendfile on; keepalive_timeout 65; server { listen 80; server_name 192.168.6.121; index index.html index.htm; root html; location / { proxy_redirect off; proxy_set_header host $host; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; proxy_pass http://$geo.server$request_uri; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 8080; server_name 192.168.6.121; location / { root html; index index.html index.htm; } } }
3. Öffnen Sie den Browser auf dem Testcomputer 1 Gerät Geben Sie
ein http://192.168.6.121
und es wird
angezeigt, da die IP-Adresse von Testmaschine 1 192.168.6.2 lautet. Laut Nginx-Konfiguration ist es offensichtlich, dass er auf Server3-Port 8080 zugreift! Weil ich die index.html von Server1 Server2 geändert habe
Öffnen Sie den Browser auf Testmaschine 2 ~ geben Sie
http://192.168.6.121 ein
Anzeige
Öffnen Sie den Browser auf Testmaschine 3 ~ geben Sie
http ein :/ /192.168.6.121
Die IP der Testmaschine 3 ist 192.168.6.189
Anzeige:
Offensichtlich spielt der Lastausgleich eine Rolle~~~
Auf diese Weise können die drei Server in verschiedenen IDC-Computerräumen platziert werden. Dann synchronisieren Sie einfach die Daten. Dies hat den Vorteil, dass Sie sich die Mühe mit DNS ersparen, da intelligentes DNS beim Parsen manchmal die DNS-Adresse der anderen Partei anhand der besuchenden IP analysiert und sie einem Server zuordnet Ist ein Netcom-Benutzer, ordnet er ihn direkt dem Telecom-Server Nginx zu und ordnet ihn anhand der Zugriffs-IP zu, solange wir die IP-Segmente in jeder Region erfassen gut
Das obige ist der detaillierte Inhalt vonDas Geo-Modul in Nginx und wie man es zum Konfigurieren des Lastausgleichs verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!