In diesem Artikel werden hauptsächlich die Konfigurationscodebeispiele für die Vorwärts- und Rückwärtsproxy- und Lastausgleichsfunktionen von Nginx vorgestellt. Der Beispielcode wird in diesem Artikel ausführlich vorgestellt, was einen gewissen Referenzwert für das Studium oder die Arbeit aller darstellt. Freunde, die ihn brauchen, können ihn zu Rate ziehen. Systemumgebung: VirtualBox-Manager Centos6.4 nginx1.10.0 Maschinenname entsprechend der IP: IP-Computername Rollenname 10.0.0.139 [Elch] Client 10.0.0.136 [lvs-master] nginx-Server 10.0.0.137 [kvm] Webserver 1 10.0.0.111 [lvs-backup] Webserver 2 1. Proxy weiterleiten 1.1 Umgebung Einführung 1.2 Konfiguration Einführung Nginx-Server: (Intranet-Adresse: 10.0.0.136, Externe Netzwerkadresse: 172.16.27.64) Verwenden Sie VirtualBox Manager, um duale Netzwerkkarten zu virtualisieren. [root@lvs-master conf.d]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:30:56:99 Inet-Adresse: 10.0.0.136 Bcast: 10.255.255.255 Maske: 255.0.0.0 inet6 Adresse: fe80::a00:27ff:fe30:5699/64 Bereich: Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1 RX-Pakete: 891978 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0 TX-Pakete: 9509 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0 Kollisionen:0 txqueuelen:1000 RX-Bytes: 81841095 (78,0 MiB) TX-Bytes: 13339058 (12,7 MiB) eth1 Link encap:Ethernet HWaddr 08:00:27:55:4C:72 Inet-Adresse: 172.16.27.64 Bcast: 172.16.27.255 Maske: 255.255.255.0 inet6 Adresse: fe80::a00:27ff:fe55:4c72/64 Bereich: Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1 RX-Pakete: 913671 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0 TX-Pakete: 22712 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0 Kollisionen:0 txqueuelen:1000 RX-Bytes: 109369858 (104,3 MiB) TX-Bytes: 1903855 (1,8 MiB) lo Link encap: Lokaler Loopback inet-Adresse:127.0.0.1 Maske:255.0.0.0 inet6 Adresse: ::1/128 Bereich:Host UP LOOPBACK RUNNING MTU:16436 Metrik:1 RX-Pakete: 36222 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0 TX-Pakete: 36222 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0 Kollisionen:0 txqueuelen:0 RX-Bytes: 3899937 (3,7 MiB) TX-Bytes: 3899937 (3,7 MiB) [root@lvs-master conf.d]# cat zxproxy.conf Server { listen 80; #Abhörport Servername 10.0.0.136; #Serverinhaltsadresse, die Netzwerkkommunikation mit dem Client-Resolver 172.16.5.1 benötigt; #DNS, dies ist DNS, Zugriff auf externen Netzwerkstandort / { proxy_pass http://$http_host$request_uri; #$http_host und $request_uri sind Nginx-Systemvariablen, sie müssen nicht ersetzt werden, lassen Sie sie so wie sie sind} Nginx-Client: Es gibt nur eine Intranet-Netzwerkkarte, und der Internetzugang erfolgt über den Nginx-Server. Tatsächlich basieren die gebräuchlichen Namen wie „Kletterwand“ und „Zombie-Huhn“ auf diesem Prinzip. [root@kvm ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:72:8C:3B Inet-Adresse: 10.0.0.137 Bcast: 10.255.255.255 Maske: 255.0.0.0 inet6 Adresse: fe80::a00:27ff:fe72:8c3b/64 Bereich: Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1 RX-Pakete:1462448 Fehler:0 verloren:0 Überläufe:0 Frame:0 TX-Pakete: 21130 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0 Kollisionen:0 txqueuelen:1000 RX-Bytes: 145119904 (138,3 MiB) TX-Bytes: 2814635 (2,6 MiB) lo Link encap: Lokaler Loopback inet-Adresse:127.0.0.1 Maske:255.0.0.0 inet6 Adresse: ::1/128 Bereich:Host UP LOOPBACK RUNNING MTU:16436 Metrik:1 RX-Pakete: 60800 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0 TX-Pakete: 60800 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0 Kollisionen:0 txqueuelen:0 RX-Bytes: 4831102 (4,6 MiB) TX-Bytes: 4831102 (4,6 MiB) [root@kvm ~]# wget www.baidu.com --2016-06-08 13:02:08-- http://www.baidu.com/ Host www.baidu.com wird aufgelöst ... Fehlgeschlagen: Die Auflösung des Domänennamens ist vorübergehend fehlgeschlagen. #Kein Zugriff auf Baidu wget möglich: Die Hostadresse „www.baidu.com“ kann nicht aufgelöst werden. [root@kvm ~]# export http_proxy=http://10.0.0.136:80 #Umgebungsvariablen festlegen, IP und Port des Proxyservers angeben [root@kvm ~]# wget www.baidu.com #Kann erfolgreich auf Baidu zugreifen--2016-06-08 13:08:15-- http://www.baidu.com/ Verbindung zu 10.0.0.136:80 wird hergestellt... Verbunden. Proxy-Anfrage wurde gesendet, warte auf Antwort... 200 OK Länge: Nicht angegeben [text/html] Speichern unter: "index.html.1" [ <=> ] 99,762 --.-K/s in 0,07s 08.06.2016 13:08:16 (1,36 MB/s) – „index.html.1“ gespeichert [99762] 2. Reverse-Proxy Einführungsartikel mit Forwardproxy 2.1 Umgebung Einführung 1. Werfen wir einen Blick auf die Testseite: [root@kvm ~]# yum installiere httpd [root@kvm ~]# echo "<html>10.0.0.137</html>" > /var/www/html/index.html [root@lvs-backup ~]# yum installiere httpd [root@lvs-backup~]# echo "<html>10.0.0.111</html>" > /var/www/html/index.html 2. Schauen Sie sich die Wirkung an: [root@lvs-backup html]# curl 10.0.0.111 <html> 10.0.0.111 </html> [root@lvs-backup html]# curl 10.0.0.137 <html> 10.0.0.137 </html> ##Alles erfolgreich, fahren wir mit dem nächsten Schritt fort. 2.2 Konfiguration Einführung [root@lvs-master conf.d]# ls #Konfigurationsdatei zxproxy.conf im nginx-Verzeichnis [root@lvs-master conf.d]# cp zxproxy.conf fxproxy.conf #Erstelle eine Kopie. Früher war es ein Forward-Proxy, jetzt ist es ein Reverse-Proxy [root@lvs-master conf.d]# mv zxproxy.conf zxproxy.conf.bak [root@lvs-master conf.d]# cat fxproxy.conf Server { hören Sie 80; Servername 10.0.0.136; #Laut Umgebungseinführung die IP des Nginx-Servers Standort / { proxy_pass http://10.0.0.137; #Die Server-IP, die geproxied wird } #proxy_pass: Proxy-Pass-URL #Standardwert: NEIN #Felder verwenden: Standort, wenn Feld in Standort #Dieser Parameter legt die Adresse des Proxy-Servers und die zugeordnete URL fest. Die Adresse kann ein Hostname, Domänenname, IP plus Portmodus sein, wie zum Beispiel: #Proxy_Passwort http://192.168.1.6:8099/linuxtone/; [root@lvs-master conf.d]# service nginx restart #Neustart und Konfiguration laden Schauen Sie sich die Ergebnisse an: #Melden Sie sich zunächst in der experimentellen Umgebung beim Client-Computer an. Die IP lautet wie folgt: [root@elk ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:3D:40:40 Inet-Adresse: 10.0.0.139 Bcast: 10.255.255.255 Maske: 255.0.0.0 inet6 Adresse: fe80::a00:27ff:fe3d:4040/64 Bereich: Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1 RX-Pakete: 2618345 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0 TX-Pakete: 247926 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0 Kollisionen:0 txqueuelen:1000 RX-Bytes: 336182790 (320,6 MiB) TX-Bytes: 35145157 (33,5 MiB) lo Link encap: Lokaler Loopback inet-Adresse:127.0.0.1 Maske:255.0.0.0 inet6 Adresse: ::1/128 Bereich:Host UP LOOPBACK RUNNING MTU:16436 Metrik:1 RX-Pakete: 177352 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0 TX-Pakete: 177352 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0 Kollisionen:0 txqueuelen:0 RX-Bytes: 26547640 (25,3 MiB) TX-Bytes: 26547640 (25,3 MiB) [root@elk ~]# curl 10.0.0.136 #Zugriff auf den Reverse-Proxy-Server <html> 10.0.0.137 </html> #Wir können sehen, dass auf den Proxyserver zugegriffen wird und das Ergebnis an Webserver1 weitergeleitet wird. #Als nächstes schauen wir uns die Protokolle von nginx-server und web-server1 an: nginx-Server: [root@lvs-master ~]# tail /var/log/nginx/access.log 10.0.0.139- - [08/Jun/2016:15:35:43 +0800] "GET / HTTP/1.1" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-" Webserver: [root@kvm httpd]# tail /var/log/httpd/access_log 10.0.0.136 - - [08/Jun/2016:15:21:12 +0800] "GET / HTTP/1.0" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" ##Wir sehen das Nginx-Protokoll auf dem Nginx-Server, das zeigt, dass der aufgerufene Benutzer 10.0.0.139 ist, was der Client in unserer Umgebung ist. #Die auf dem Webserver angezeigte IP ist 10.0.0.136, das ist der Nginx-Server. #Einfach ausgedrückt bedeutet Reverse-Proxy, dass der Nginx-Server der echte Server für Kunden ist. Wenn Benutzer auf den Nginx-Server zugreifen, wird die Anforderung tatsächlich an #Webserver1 weitergeleitet, und dann sendet Webserver1 das Ergebnis der Anforderung an den Nginx-Server, und dann leitet der Ngin-Small-Server das Ergebnis der Anforderung an den Benutzer weiter. #Auf dem Webserver sehen Sie nur die Proxy-IPs. Können Sie auch die echten Benutzer-IPs sehen? [root@lvs-master conf.d]# cat fxproxy.conf Server { hören Sie 80; Servername 10.0.0.136; #Laut Umgebungseinführung, Nginx-Server-IP Standort / { proxy_pass http://10.0.0.137; #Die Server-IP, die geproxied wird proxy_set_header X-Real-IP $remote_addr; #Diese Zeile wird hinzugefügt} [root@lvs-master conf.d]# service nginx restart [root@kvm ~]# tail /var/log/httpd/access_log 10.0.0.136 - - [08/Jun/2016:16:10:53 +0800] "GET / HTTP/1.0" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" #Nach der Änderung wird die IP-Adresse des Proxyservers weiterhin angezeigt. Ändern wir die Konfiguration auf dem Webserver [root@kvm ~]# vim /etc/httpd/conf/httpd.conf LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" kombiniert LogFormat "%h %l %u %t \"%r\" %>s %b" allgemein LogFormat "%{Referer}i -> %U" Referrer LogFormat "%{User-agent}i"-Agent #Geändert in: (%h bezieht sich auf den Host, auf den zugegriffen wird, jetzt wird es in die tatsächliche IP des Hosts geändert, auf den zugegriffen wird) LogFormat "%{X-Real-IP}i</span> %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" kombiniert LogFormat "%h %l %u %t \"%r\" %>s %b" allgemein LogFormat "%{Referer}i -> %U" Referrer LogFormat "%{User-agent}i"-Agent [root@kvm ~]# service httpd restart httpd wird gestoppt: [ OK ] httpd wird gestartet: [ OK ] [root@kvm ~]# tail /var/log/httpd/access_log 10.0.0.136 - - [08/Jun/2016:16:10:53 +0800] "GET / HTTP/1.0" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" <span style="color:#FF0000;">10.0.0.139</span> - - [08/Jun/2016:16:16:01 +0800] "GET / HTTP/1.0" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" #Es ist die echte Zugangsadresse geworden Mehrere Webserver per Proxy verbinden: [root@lvs-master conf.d]# cat fxproxy.conf Server { hören Sie 80; Servername 10.0.0.136; Standort / { Proxy-Passwort http://10.0.0.137; Proxy_Set_Header X-Real-IP $Remote_Addr; } location /web2 { #Weiteren Standort hinzufügen Proxy-Passwort http://10.0.0.111; Proxy_Set_Header X-Real-IP $Remote_Addr; } [root@lvs-backup ~]# cd /var/www/html/ #Geben Sie den Webserver2 unter 10.0.0.111 ein [root@lvs-backup html]# mkdir web [root@lvs-backup html]# echo "<html>10.0.0.111</html>" > index.html # Versuchen wir, auf dem Client darauf zuzugreifen: [root@elk ~]# curl 10.0.0.136/web2/ <html> 10.0.0.111 </html> #Zugriff erfolgreich 3. Lastverteilung Es gibt viele Möglichkeiten, Lastausgleich zu implementieren. Das häufig verwendete LVS ist ein vierschichtiger Lastausgleich, und nginx ist ein siebenschichtiger Lastausgleich. Sie können online nach relevanten Informationen suchen. 3.1 Umgebung Einführung 3.2 Konfiguration Einführung 1. Upstream ist das HTTP-Upstream-Modul von Nginx. Dieses Modul verwendet einen einfachen Planungsalgorithmus, um einen Lastenausgleich von der Client-IP zum Backend-Server zu erreichen. In den obigen Einstellungen wird durch die Upstream-Direktive ein Load Balancer-Name 1.2.3.4 angegeben. Dieser Name kann beliebig vergeben und später dort direkt aufgerufen werden, wo er benötigt wird. 2. Das Lastausgleichsmodul von Nginx unterstützt derzeit vier Planungsalgorithmen, die im Folgenden vorgestellt werden. Die letzten beiden sind Planungsalgorithmen von Drittanbietern.
3. Vom Upstream unterstützte Statusparameter Im HTTP-Upstream-Modul können Sie die IP-Adresse und den Port des Backend-Servers über die Serverdirektive angeben und außerdem den Status jedes Backend-Servers in der Lastausgleichsplanung festlegen. Häufig verwendete Zustände sind:
Hinweis: Wenn der Lastplanungsalgorithmus „ip_hash“ ist, kann der Status des Backend-Servers in der Lastausgleichsplanung nicht „Gewicht“ oder „Sicherung“ sein. [root@lvs-master conf.d]# cat ../nginx.conf http { /etc/nginx/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"'; Zugriffsprotokoll /var/log/nginx/access.log Haupt; sendfile an; #tcp_nopush ein; KeepAlive-Timeout 65; #gzip ein; upstream 1.2.3.4 { Server 10.0.0.111:80; Server 10.0.0.137:80; } schließen Sie /etc/nginx/conf.d/*.conf ein; } [root@lvs-master conf.d]# cat slb.confserver { Standort / { Proxy-Passwort http://1.2.3.4; Proxy-Set-Header X-Real-IP $remote_addr; } #Hinweis: Upstream wird außerhalb von Server{} definiert und kann nicht innerhalb von Server{} definiert werden. Nachdem Sie den Upstream definiert haben, referenzieren Sie ihn einfach mit Proxy_Pass. 4. Testergebnisse [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.111 </html> [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.137 </html> [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.111 </html> #Das Ergebnis ist, dass Server1 und 2 abwechselnd angezeigt werden, was darauf hinweist, dass die Standardmethode zum Lastenausgleich Polling ist. 5. Gesundheitscheck Im Allgemeinen erfordern Integritätsprüfungen Keepalived, aber nginx verfügt auch über entsprechende Parameter, die festgelegt werden können. max_fails, die Anzahl der zulässigen Anforderungsfehler, der Standardwert ist 1. Wenn die maximale Anzahl überschritten wird, wird ein durch das Modul proxy_next_upstream definierter Fehler zurückgegeben. fail_timeout, die Zeit bis zur Unterbrechung des Dienstes nach max_fails-Fehlern. max_fails kann zusammen mit fail_timeout für Integritätsprüfungen verwendet werden. [root@lvs-master conf.d]# cat ../nginx.conf http { /etc/nginx/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"'; Zugriffsprotokoll /var/log/nginx/access.log Haupt; sendfile an; #tcp_nopush ein; KeepAlive-Timeout 65; #gzip ein; upstream 1.2.3.4 { Server 10.0.0.111:80 Gewicht=1 max_fails=2 fail_timeout=2; Server 10.0.0.137:80 Gewicht=1 max_fails=2 fail_timeout=2; } schließen Sie /etc/nginx/conf.d/*.conf ein; } [root@lvs-master conf.d]# service nginx restart 6. Testen Sie die Ergebnisse [root@kvm httpd]# service httpd stop #Webserver1-Dienst herunterfahren [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.111 </html> [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.111 </html> #Jetzt kann nur noch auf Webserver2 zugegriffen werden. [root@kvm httpd]# service httpd start #Öffnen Sie den Dienst „Web-Server1“ [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.111 </html> [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.137 </html> [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.111 </html> 7. Lastausgleich von ip_hash [root@lvs-master conf.d]# cat ../nginx.conf upstream 1.2.3.4 { ip_hash; Server 10.0.0.111:80 Gewicht=1 max_fails=2 fail_timeout=2; Server 10.0.0.137:80 Gewicht=1 max_fails=2 fail_timeout=2; } [root@lvs-master conf.d]# service nginx restart Stoppen Sie nginx: [OK] Nginx wird gestartet: [OK] [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.137 </html> [root@elk ~]# curl 10.0.0.136 <html> 10.0.0.137 </html> #Nach der Konfiguration dieses Lastenausgleichs wird >jede Anfrage entsprechend dem Hash-Ergebnis der Zugriffs-IP verteilt, sodass Besucher mit derselben IP-Adresse auf einen festen Backend-Server zugreifen. #Löst effektiv das Problem der Sitzungsfreigabe dynamischer Webseiten. (Im Allgemeinen wird es häufiger auf E-Commerce-Websites verwendet) 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:
|
<<: Mycli ist ein unverzichtbares Tool für MySQL-Befehlszeilen-Enthusiasten
>>: Implementierung eines einfachen Chatroom-Dialogs basierend auf WebSocket
Inhaltsverzeichnis Unterschied zwischen char und ...
1. Reinigen Sie vor der Installation gründlich rp...
Frage Als ich heute eine Projektfunktion schrieb,...
Ich habe es Ihnen bereits vorgestellt: Docker (Be...
.y { background: url(//img.jbzj.com/images/o_y.pn...
1.mysql-5.7.19-winx64.zip (das ist die kostenlose...
Löschprozedur sp_name/ Zuvor habe ich Ihnen die G...
Was Sie lernen werden 1. Softwareinstallation und...
In einigen Szenarien möchten wir derselben Ethern...
Der Inhalt des geschriebenen Dockerfiles ist: VON...
Speicherort der MySQL-Datenbank: 1. Wenn MySQL di...
1. Einleitung MySQL verfügt über eine Replikation...
Hallo zusammen, heute werde ich die Implementieru...
Inhaltsverzeichnis 1: Einführung in Galera-Cluste...