Verständnis des Nginx-Lastausgleichs
nginx ist ein leichter, leistungsstarker Webserver. Er kann hauptsächlich die folgenden zwei Dinge tun:
Heutzutage ist Nginx überall zu sehen. Es ist oft zu sehen, dass die Wörter Nginx nach einer Ausfallzeit auf der Webseite angezeigt werden. Dies zeigt auch, dass Nginx aufgrund seiner hohen Leistung und einfachen Bedienung immer mehr verwendet wird Konfiguration und Open Source akzeptiert, verwendet.
Der erste fungiert in Kombination mit dem PHP-FPM-Prozess als Server, um eingehende Anfragen zu verarbeiten. Er fungiert lediglich als Server, um Anfragen vom Client anzunehmen Die Anfrage wird zur Verarbeitung an den PHP-Prozess übergeben und das Ergebnis nach Abschluss der PHP-Verarbeitung an den Client gesendet. Dies ist sehr einfach. Konfigurieren Sie nach der Installation von nginx php-fpm die entsprechenden Konfigurationsdateien und starten Sie es. Das Funktionsprinzip ist in der folgenden Erklärung ersichtlich:
Nginx unterstützt kein direktes Aufrufen oder Parsen externer Programme. Alle externen Programme (einschließlich PHP) müssen über die FastCGI-Schnittstelle aufgerufen werden. Die FastCGI-Schnittstelle ist ein Socket unter Linux (dieser Socket kann ein Datei-Socket oder ein IP-Socket sein). Um ein CGI-Programm aufzurufen, wird außerdem ein FastCGI-Wrapper benötigt (ein Wrapper kann als ein Programm verstanden werden, das zum Starten eines anderen Programms verwendet wird). Dieser Wrapper ist an einen festen Socket gebunden, beispielsweise einen Port oder einen Datei-Socket. Wenn Nginx eine CGI-Anfrage an diesen Socket sendet, empfängt der Wrapper die Anfrage über die FastCGI-Schnittstelle und erzeugt dann einen neuen Thread. Dieser Thread ruft den Interpreter oder ein externes Programm auf, um das Skript zu verarbeiten und dann die Rückgabedaten zu lesen Die zurückgegebenen Daten werden über den festen Socket über die FastCGI-Schnittstelle an Nginx weitergeleitet. Schließlich sendet Nginx die zurückgegebenen Daten an den Client. Dies ist der gesamte Betriebsprozess von Nginx FastCGI, wie in der folgenden Abbildung dargestellt.
Der obige Absatz erläutert den Funktionsmechanismus von Nginx Fastcgi. Die Anforderung wird in der Nginx-Konfigurationsdatei abgeglichen und entsprechend verarbeitet, z. B. durch direktes Zurückgeben der Fehlerdatei (es gibt einen kleinen Unterschied zwischen diesem und dem oben Gesagten). Schätzungen zufolge kann Nginx statische Dateien wie HTML intern analysieren (ähnlich wie im Bild oben) und den PHP-Prozess verwenden, um PHP-Anfragen zu verarbeiten (hier kann es mehrere PHP-Prozesse geben).
Die zweite Möglichkeit besteht darin, den Reverse-Proxy-Lastausgleich zu verwenden. Vereinfacht ausgedrückt definieren Sie eine Gruppe von Servern, gleichen die Anforderungen ab und übertragen die Anforderungen zur Verarbeitung an einen der Server Um Druck auf jeden Server auszuüben, werfen Sie zunächst einen Blick auf die Definition von Reverse Proxy online:
Die Reverse-Proxy-Methode bezieht sich auf die Verwendung eines Proxyservers, um Verbindungsanfragen im Internet anzunehmen, die Anfragen dann an den Server im internen Netzwerk weiterzuleiten und die vom Server erhaltenen Ergebnisse an die Person zurückzugeben, die die Verbindung im Internet anfordert .Client, zu diesem Zeitpunkt erscheint der Proxyserver nach außen als Reverse-Proxyserver.
Reverse-Proxy ist das Gegenteil von Forward-Proxy (oder Proxy). Um bequemer auf Ressource B zuzugreifen, wird auf Ressource B indirekt über Ressource A zugegriffen. Das Merkmal ist, dass Benutzer es wissen Was ist die endgültige Website, die besucht werden soll? Reverse-Proxy-Benutzer wissen jedoch nicht, welche Verarbeitung hinter dem Proxy-Server erfolgt. Der eigentliche Verarbeitungsserver des Reverse-Proxy-Dienstes befindet sich im Intranet, und nur auf den Reverse-Proxy-Server kann zugegriffen werden aus dem externen Netzwerk, was auch die Sicherheit erheblich verbessert.
Software installieren
Die Nginx-Installation ist sehr einfach
1. Die Umgebung, die zum Installieren von Nginx, PCRE (zum Umschreiben), Zlib (zur Komprimierung) und SSL erforderlich ist. Sie können diese auch selbst herunterladen, kompilieren und installieren
yum -y install zlib;
yum –y installiere pcre;
yum –y install openssl;
2. Laden Sie nginx-*.tar.gz herunter und installieren Sie es.
tar –zxvf nginx-1.2.8.tar.gz –C ./;
cd nginx-1.2.8;
./congigure --prefix=/usr/local/nginx;
make && make install;
3. Konfiguration
Bei der Konfiguration müssen Sie nur den Inhalt zwischen http{} ändern. Der erste Ort zum Ändern besteht darin, die Servergruppe einzurichten und
zwischen den http-Knoten hinzuzufügen.upstream myServer{
server www.myapp2.com:80; #Hier ist die Serveradresse für den Lastausgleich 1
server www.myapp1.com:8080; #Hier ist die Serveradresse für die Lastverteilung Ausgleichsadresse 2
}Upstream in Nginx unterstützt die folgenden Methoden: Polling (standardmäßig wird auf alle Server nacheinander in chronologischer Reihenfolge zugegriffen. Wenn ein Server ausfällt, wird er automatisch eliminiert), Gewichtung (die Standortwahrscheinlichkeit des Servers ist proportional entsprechend der Gewichtung), dies kann konfiguriert werden, wenn die Serverkonfiguration ungleichmäßig ist), ip_hash (Hash-Berechnung wird für jede angeforderte IP durchgeführt und der entsprechende Server wird nach bestimmten Regeln zugewiesen), fair (gemäß der Antwortzeit (rt) jedes Servers) Anforderungen verteilen, rt kennt die Prioritätsverteilung), url_hash (Anforderungen gemäß dem Hash-Wert der Zugriffs-URL verteilen), ich verwende hier die Standardrotationsmethode.
Direkte Anfragen an myServer
Standort / {
Proxy_Pass http://myServer;
}Die vollständige Datei (Kommentare entfernt) lautet wie folgt:
worker_processes <span>1</span><span>; events { worker_connections </span><span>1024</span><span>; } http { include mime.types; default_type application</span>/octet-<span>stream; sendfile on; keepalive_timeout </span><span>65</span><span>; upstream myServer{ server www.myapp1.com:</span><span>80</span><span>; server www.myapp2.com:</span><span>8080</span><span>; } server { listen </span><span>80</span><span>; server_name my22; location </span>/<span> { proxy_pass http:</span><span>//</span><span>myServer;</span> <span> } } }</span>Nach dem Login kopieren
Richten Sie ein Reverse-Proxy-Backend als Load Balancer zwischen den beiden Servern ein
Sie können sehen, dass es im vorherigen Schritt zwei Serveradressen gibt, www.myapp1.com:80 und www.myapp2.com:8080. Ich habe den oben genannten Nginx auf der virtuellen Maschine installiert Im lokalen Win8-System werden mithilfe des virtuellen Hosts von Apache zwei Domänennamen eingerichtet. Die Codes unter den beiden Domänennamen sind unabhängig voneinander und die Einstellungen sind ebenfalls sehr einfach:
1. Apache-Konfigurationsdatei festlegen
Ich habe eine Datei index.php in www.myapp1.com:80 [E:softxampphtdocswww.myapp1.comindex.php]Ich verwende die integrierte xampp-Umgebung. Es gibt zwei Stellen zum Ändern
zum Abhörport in httpd.conf8080 anhören
Mit anderen Worten, dieser Ort überwacht zwei Ports
Hören Sie 80
Hören Sie 8080Überprüfen Sie, ob der Satz unten geöffnet ist. Wenn nicht, öffnen Sie ihn wie unten gezeigt
Fügen Sie den folgenden Inhalt in httpd-vhosts.conf hinzu,<span># Virtual hosts Include conf</span>/extra/httpd-vhosts.confNach dem Login kopieren
Ändern Sie die Windows-Hosts-Datei und fügen Sie den folgenden Inhalt hinzu<VirtualHost *:<span>80</span>><span> ServerName www.myapp1.com #对应的域名,负载均衡的服务器地址 DocumentRoot E:\soft\xampp\htdocs\www.myapp1.com #代码文件夹 </span></VirtualHost> <VirtualHost *:<span>8080</span>><span> ServerName www.myapp2.com DocumentRoot E:\soft\xampp\htdocs\www.myapp2.com </span></VirtualHost>Nach dem Login kopieren
Ändern Sie die Datei /etc/hosts von Linux und fügen Sie den folgenden Inhalt hinzu<span>127.0</span>.<span>0.1</span><span> www.myapp1.com </span><span>127.0</span>.<span>0.1</span> www.myapp2.comNach dem Login kopieren
<span>192.168</span>.<span>1.12</span><span> www.myapp1.com #这里前面的地址对应我win8本机的ip地址 </span><span>192.168</span>.<span>1.12</span> www.myapp2.comNach dem Login kopieren
eingefügt
Eine Datei index.php wird auch in www.myapp2.com:8080 [E:softxampphtdocswww.myapp2.comindex.php]abgelegt
Der Inhalt der Datei ist im Grunde derselbe, außer dass ich myapp2 unterschiedlich bin. Einer ist myapp1 und der andere ist myapp2.Wenn Sie im Win8-Browser www.myapp1.com:80 und www.myapp2.com:8080 eingeben können, sehen Sie verschiedene Effekte
Und wenn Sie unter Centos (von Ihnen selbst verschönert) die folgenden Ergebnisse sehen, bedeutet dies, dass die Konfiguration erfolgreich war
[root@bogon nginx]# curl www.myapp1.com:<span>80</span><span> I</span><span>'</span><span>m the myapp1<br>【view】1</span> [root@bogon nginx]# curl www.myapp2.com:<span>8080</span><span> I</span><span>'</span><span>m the myapp2<br>【view】1</span>Nach dem Login kopieren
Sehen Sie sich die Wirkung an
<?<span>php </span><span>session_save_path</span>("./"<span>); </span><span>session_start</span><span>(); </span><span>header</span>("Content-type:text/html;charset=utf-8"<span>); </span><span>if</span>(<span>isset</span>(<span>$_SESSION</span>['view'<span>])){ </span><span>$_SESSION</span>['view'] = <span>$_SESSION</span>['view'] + 1<span>; }</span><span>else</span><span>{ </span><span>$_SESSION</span>['view'] = 1<span>; } </span><span>echo</span> "I'm the myapp2<br>"<span>; </span><span>echo</span> "【view】{<span>$_SESSION</span>['view']}";Nach dem Login kopieren
Nachdem alles in Ordnung ist, können Sie über den Browser darauf zugreifen, um den Effekt zu sehen
Ich habe vergessen zu erwähnen, dass die Adresse des Nginx-Proxyservers http://192.168.1.113 lautet,
Nachdem Sie http://192.168.1.113/index.php in den Browser eingegeben haben, aktualisieren Sie ihn weiter. Sie werden feststellen, dass er sich in
befindet
Ich bin die myapp2、Ich bin die myapp1
Wenn diese beiden Seiten hin und her ausgetauscht werden, wird die Ansicht einmal hinzugefügt, ohne sie zweimal zu aktualisieren. Dies beweist auch, dass die zuvor erwähnte Standardmethode das Rotationstraining ist, aber es gibt hier ein weiteres häufiges Problem Wenn der Benutzer eine Website besucht, wird die Sitzung ohne Verarbeitung auf verschiedenen Servern gespeichert (ich verwende hier zwei verschiedene Ordner, um zwei Server zu simulieren). Es können mehrere Sitzungsdatensätze vorhanden sein. Weiter geht es um dieses Problem , es ist eigentlich ganz einfach.
Das Urheberrecht dieses Artikels liegt beim Autor (luluyrt@163.com). Nach dem Nachdruck des Artikels müssen der Autor und der Originaltext-Link angegeben werden an einer offensichtlichen Stelle auf der Artikelseite, andernfalls behalten wir uns die Geltendmachung gesetzlicher Haftungsrechte vor.
Das Obige stellt vor, wie man den Lastausgleich auf Centos Nginx von Grund auf konfiguriert, einschließlich aller Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.