Inhaltsverzeichnis
Load Balancing
Konfigurationsmethode:
Implementierungsbeispiel
Heim Backend-Entwicklung PHP-Tutorial PHP-Interviewfrage 7: So konfigurieren Sie den Nginx-Lastausgleich

PHP-Interviewfrage 7: So konfigurieren Sie den Nginx-Lastausgleich

Apr 18, 2018 am 09:54 AM
nginx php 如何

Der Inhalt dieses Artikels befasst sich mit der Konfiguration des Lastausgleichs von Nginx in Frage 7. Er hat einen gewissen Referenzwert. Jetzt kann ich ihn mit Ihnen teilen

Load Balancing


Nginx Load Balancing hat 4 Modi:

1), Polling (Standard)
Jede Anfrage wird in chronologischer Reihenfolge nacheinander einem anderen Backend-Server zugewiesen. Wenn der Backend-Server ausfällt, kann er automatisch eliminiert werden.
2), Gewicht
Geben Sie die Abfragewahrscheinlichkeit an. Die Gewichtung ist proportional zum Zugriffsverhältnis und wird verwendet, wenn die Leistung des Back-End-Servers ungleichmäßig ist.
2), ip_hash
Jede Anfrage wird entsprechend dem Hash-Ergebnis der Zugriffs-IP zugewiesen, sodass jeder Besucher festen Zugriff auf einen Back-End-Server hat, der das Sitzungsproblem lösen kann.
3), fair (Dritter)
Anfragen werden entsprechend der Antwortzeit des Back-End-Servers zugewiesen, und Anfragen mit kurzen Antwortzeiten werden zuerst zugewiesen.
4), url_hash (Dritter)

Konfigurationsmethode:

Öffnen Sie die Datei nginx.cnf

Upstream-Knoten unter http-Knoten hinzufügen :

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080;  
}
Nach dem Login kopieren

Der Webname ist der von Ihnen gewählte Name. Der Zugriff erfolgt über diesen Namen in der URL. Wenn nichts hinzugefügt wird, erfolgt standardmäßig eine Abfrage Der erste Server wird aufgerufen, der zweite fordert den Zugriff auf den zweiten Server an. Kommen Sie der Reihe nach.

upstream webname {  
  server 192.168.0.1:8080 weight 2;  
  server 192.168.0.2:8080 weight 1;  
}
Nach dem Login kopieren

Dieses Gewicht ist auch leicht zu verstehen, je größer die Wahrscheinlichkeit, dass auf Server1 zugegriffen wird, und auf Server2 einmal zugegriffen wird

upstream webname {  
  ip_hash;  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080;  
}
Nach dem Login kopieren

ip_hash Die Konfiguration ist ebenfalls sehr einfach. Fügen Sie einfach eine Zeile hinzu, sodass jeder, der von derselben IP kommt, zum selben Server geht

und konfigurieren Sie ihn dann unter dem Serverknoten:

location /name {  
    proxy_pass http://webname/name/;  
    proxy_http_version 1.1;  
    proxy_set_header Upgrade $http_upgrade;  
    proxy_set_header Connection "upgrade";  
}
Nach dem Login kopieren

proxy_pass Der oben konfigurierte Webname ersetzt die ursprüngliche IP-Adresse.

Damit ist die Lastausgleichskonfiguration im Wesentlichen abgeschlossen.

Das Folgende ist die Konfiguration des Aktiv- und Backup-Knotens:

Noch im Upstream

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080 backup;  
}
Nach dem Login kopieren

Legen Sie einen bestimmten Knoten als Backup fest, dann werden unter normalen Umständen alle Anfragen ausgeführt Greifen Sie auf Server1 zu. Server1 greift nur auf Server2 zu, wenn Server1 auflegt oder beschäftigt ist.

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080 down;  
}
Nach dem Login kopieren

Setzen Sie einen Knoten auf „Down“, dann nimmt dieser Server nicht an der Last teil.

Implementierungsbeispiel

Lastausgleich ist etwas, was unsere stark frequentierte Website tun muss. Jetzt werde ich Ihnen die Lastausgleichskonfigurationsmethode auf dem Nginx-Server vorstellen für Studierende in Not.

Lastausgleich

Lassen Sie uns zunächst kurz verstehen, was Lastausgleich ist. Um es wörtlich zu verstehen, kann es erklären, dass N Server die Last gleichmäßig teilen, und das liegt nicht daran, dass ein bestimmter Server einen hat Hohe Auslastung Eine Situation, in der ein Server ausgefallen ist und sich im Leerlauf befindet. Die Voraussetzung für den Lastausgleich besteht darin, dass er von mehreren Servern erreicht werden kann, dh mehr als zwei Server sind ausreichend.

Testumgebung
Da kein Server vorhanden ist, hostet dieser Test direkt den angegebenen Domänennamen und installiert dann drei CentOS in VMware.

Testdomänenname: a.com

A-Server-IP: 192.168.5.149 (Haupt)

B-Server-IP: 192.168.5.27

C-Server IP: 192.168.5.126

Bereitstellungsidee
Ein Server wird als Hauptserver verwendet, der Domänenname wird direkt auf A-Server (192.168.5.149) aufgelöst und die A-Server-Last wird auf B-Server verteilt ( 192.168.5.27) und C auf dem Server (192.168.5.126).

Auflösung des Domänennamens

Da es sich nicht um eine reale Umgebung handelt, lautet der Domänenname zum Testen nur a.com, sodass die Auflösung von a.com nur in der Hosts-Datei festgelegt werden kann.

Öffnen: C:WindowsSystem32driversetchosts

Fügen Sie

192.168.5.149    a.com
Nach dem Login kopieren

am Ende hinzu, um zu speichern und zu beenden. Starten Sie dann den Befehlsmodus und pingen Sie, um zu sehen, ob die Einstellung erfolgreich ist

Dem Screenshot nach zu urteilen, wurde a.com erfolgreich auf 192.168.5.149IP analysiert

Ein Server nginx.conf-Einstellungen
Öffnen Sie nginx.conf und der Speicherort der Datei befindet sich in der conf Verzeichnis des Nginx-Installationsverzeichnisses.

Fügen Sie den folgenden Code im http-Bereich hinzu

upstream a.com { 
      server  192.168.5.126:80; 
      server  192.168.5.27:80; 
} 

server{ 
    listen 80; 
    server_name a.com; 
    location / { 
        proxy_pass        http://a.com; 
        proxy_set_header  Host            $host; 
        proxy_set_header  X-Real-IP        $remote_addr; 
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for; 
    } 
}
Nach dem Login kopieren

Speichern Sie Nginx und starten Sie es neu

B- und C-Server nginx.conf-Einstellungen
Öffnen Sie nginx.conf und fügen Sie es hinzu es im http-Abschnitt Der folgende Code

server{ 
    listen 80; 
    server_name a.com; 
    index index.html; 
    root /data0/htdocs/www; 
}
Nach dem Login kopieren

Nginx speichern und neu starten

Test
Um beim Zugriff auf a.com zu unterscheiden, an welchen Server zur Verarbeitung übertragen werden soll, habe ich Ich habe jeweils eine Index.html-Datei unter den B- und C-Servern mit unterschiedlichem Inhalt geschrieben, um sie zu unterscheiden.

Öffnen Sie den Browser, um auf a.com Refresh zuzugreifen. Sie werden feststellen, dass alle Anfragen vom Hauptserver (192.168.5.149) an Server B (192.168.5.27) und Server C (192.168.5.126) verteilt werden. . Erzielter Lastausgleichseffekt.

B-Server-Verarbeitungsseite

C-Server-Verarbeitungsseite

Was passiert, wenn einer der Server ausfällt?
Wird der Zugriff beeinträchtigt, wenn ein Server ausfällt?

Schauen wir uns zunächst das Beispiel an. Nehmen wir basierend auf dem obigen Beispiel an, dass der C-Server 192.168.126 der Maschine ausgefallen ist (da es unmöglich ist, die Ausfallzeit zu simulieren, habe ich den C-Server heruntergefahren). und dann noch einmal besuchen.

Zugriffsergebnisse:

Wir haben festgestellt, dass der C-Server (192.168.5.126) zwar ausgefallen war, dies jedoch keinen Einfluss auf den Website-Zugriff hatte. Auf diese Weise müssen Sie sich keine Sorgen darüber machen, dass die gesamte Site heruntergefahren wird, weil ein bestimmter Computer im Lastausgleichsmodus ausfällt.

如果b.com也要设置负载均衡怎么办?
很简单,跟a.com设置一样。如下:

假设b.com的主服务器IP是192.168.5.149,负载均衡到192.168.5.150和192.168.5.151机器上

现将域名b.com解析到192.168.5.149IP上。

在主服务器(192.168.5.149)的nginx.conf加入以下代码:

upstream b.com { 
      server  192.168.5.150:80; 
      server  192.168.5.151:80; 
} 

server{ 
    listen 80; 
    server_name b.com; 
    location / { 
        proxy_pass        http://b.com; 
        proxy_set_header  Host            $host; 
        proxy_set_header  X-Real-IP        $remote_addr; 
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for; 
    } 
}
Nach dem Login kopieren

保存重启nginx

在192.168.5.150与192.168.5.151机器上设置nginx,打开nginx.conf在末尾添加以下代码:

server{ 
    listen 80; 
    server_name b.com; 
    index index.html; 
    root /data0/htdocs/www; 
}
Nach dem Login kopieren

保存重启nginx

完成以后步骤后即可实现b.com的负载均衡配置。

主服务器不能提供服务吗?
以上例子中,我们都是应用到了主服务器负载均衡到其它服务器上,那么主服务器本身能不能也加在服务器列表中,这样就不会白白浪费拿一台服务器纯当做转发功能,而是也参与到提供服务中来。

如以上案例三台服务器:

A服务器IP :192.168.5.149 (主)

B服务器IP :192.168.5.27

C服务器IP :192.168.5.126

我们把域名解析到A服务器,然后由A服务器转发到B服务器与C服务器,那么A服务器只做一个转发功能,现在我们让A服务器也提供站点服务。

我们先来分析一下,如果添加主服务器到upstream中,那么可能会有以下两种情况发生:

1、主服务器转发到了其它IP上,其它IP服务器正常处理;

2、主服务器转发到了自己IP上,然后又进到主服务器分配IP那里,假如一直分配到本机,则会造成一个死循环。

怎么解决这个问题呢?因为80端口已经用来监听负载均衡的处理,那么本服务器上就不能再使用80端口来处理a.com的访问请求,得用一个新的。于是我们把主服务器的nginx.conf加入以下一段代码:

server{ 
    listen 8080; 
    server_name a.com; 
    index index.html; 
    root /data0/htdocs/www; 
}
Nach dem Login kopieren

重启nginx,在浏览器输入a.com:8080试试看能不能访问。结果可以正常访问

既然能正常访问,那么我们就可以把主服务器添加到upstream中,但是端口要改一下,如下代码:

upstream a.com { 
      server  192.168.5.126:80; 
      server  192.168.5.27:80; 
      server  127.0.0.1:8080; 
}
Nach dem Login kopieren

由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。

重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。

主服务器也能正常加入服务了。

最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。

二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。

三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。

四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上

相关推荐:

php面试题六之memcache和redis的区别

php面试题五之nginx如何调用php和php-fpm的作用和工作原理

php面试题四之实现autoload

Das obige ist der detaillierte Inhalt vonPHP-Interviewfrage 7: So konfigurieren Sie den Nginx-Lastausgleich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP: Datenbanken und serverseitige Logik bearbeiten PHP: Datenbanken und serverseitige Logik bearbeiten Apr 15, 2025 am 12:15 AM

PHP verwendet MySQLI- und PDO-Erweiterungen, um in Datenbankvorgängen und serverseitiger Logikverarbeitung zu interagieren und die serverseitige Logik durch Funktionen wie Sitzungsverwaltung zu verarbeiten. 1) Verwenden Sie MySQLI oder PDO, um eine Verbindung zur Datenbank herzustellen und SQL -Abfragen auszuführen. 2) Behandeln Sie HTTP -Anforderungen und Benutzerstatus über Sitzungsverwaltung und andere Funktionen. 3) Verwenden Sie Transaktionen, um die Atomizität von Datenbankvorgängen sicherzustellen. 4) Verhindern Sie die SQL -Injektion, verwenden Sie Ausnahmebehandlung und Schließen von Verbindungen zum Debuggen. 5) Optimieren Sie die Leistung durch Indexierung und Cache, schreiben Sie hochlesbarer Code und führen Sie die Fehlerbehandlung durch.

Zweck von PHP: Erstellen dynamischer Websites Zweck von PHP: Erstellen dynamischer Websites Apr 15, 2025 am 12:18 AM

PHP wird verwendet, um dynamische Websites zu erstellen. Zu den Kernfunktionen gehören: 1. Dynamische Inhalte generieren und Webseiten in Echtzeit generieren, indem Sie eine Verbindung mit der Datenbank herstellen; 2. Verarbeiten Sie Benutzerinteraktions- und Formulareinreichungen, überprüfen Sie Eingaben und reagieren Sie auf Operationen. 3. Verwalten Sie Sitzungen und Benutzerauthentifizierung, um eine personalisierte Erfahrung zu bieten. 4. Optimieren Sie die Leistung und befolgen Sie die Best Practices, um die Effizienz und Sicherheit der Website zu verbessern.

PHP und Python: Code Beispiele und Vergleich PHP und Python: Code Beispiele und Vergleich Apr 15, 2025 am 12:07 AM

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

So überprüfen Sie, ob Nginx gestartet wird So überprüfen Sie, ob Nginx gestartet wird Apr 14, 2025 pm 01:03 PM

So bestätigen Sie, ob Nginx gestartet wird: 1. Verwenden Sie die Befehlszeile: SystemCTL Status Nginx (Linux/Unix), Netstat -ano | FindStr 80 (Windows); 2. Überprüfen Sie, ob Port 80 geöffnet ist; 3. Überprüfen Sie die Nginx -Startmeldung im Systemprotokoll. 4. Verwenden Sie Tools von Drittanbietern wie Nagios, Zabbix und Icinga.

So konfigurieren Sie den Namen des Cloud -Server -Domänennamens in Nginx So konfigurieren Sie den Namen des Cloud -Server -Domänennamens in Nginx Apr 14, 2025 pm 12:18 PM

So konfigurieren Sie einen Nginx -Domänennamen auf einem Cloud -Server: Erstellen Sie einen Datensatz, der auf die öffentliche IP -Adresse des Cloud -Servers zeigt. Fügen Sie virtuelle Hostblöcke in die NGINX -Konfigurationsdatei hinzu, wobei der Hörport, Domänenname und das Root -Verzeichnis der Website angegeben werden. Starten Sie Nginx neu, um die Änderungen anzuwenden. Greifen Sie auf die Konfiguration des Domänennamens zu. Weitere Hinweise: Installieren Sie das SSL -Zertifikat, um HTTPS zu aktivieren, sicherzustellen, dass die Firewall den Verkehr von Port 80 ermöglicht, und warten Sie, bis die DNS -Auflösung wirksam wird.

So starten Sie den Nginx -Server So starten Sie den Nginx -Server Apr 14, 2025 pm 12:27 PM

Das Starten eines Nginx-Servers erfordert unterschiedliche Schritte gemäß verschiedenen Betriebssystemen: Linux/UNIX-System: Installieren Sie das NGINX-Paket (z. B. mit APT-Get oder Yum). Verwenden Sie SystemCTL, um einen Nginx -Dienst zu starten (z. B. sudo systemctl start nginx). Windows -System: Laden Sie Windows -Binärdateien herunter und installieren Sie sie. Starten Sie Nginx mit der ausführbaren Datei nginx.exe (z. B. nginx.exe -c conf \ nginx.conf). Unabhängig davon, welches Betriebssystem Sie verwenden, können Sie auf die Server -IP zugreifen

So starten Sie Nginx unter Linux So starten Sie Nginx unter Linux Apr 14, 2025 pm 12:51 PM

Schritte zum Starten von Nginx unter Linux: Überprüfen Sie, ob Nginx installiert ist. Verwenden Sie SystemCTL Start Nginx, um den Nginx -Dienst zu starten. Verwenden Sie SystemCTL aktivieren NGINX, um das automatische Start von NGINX beim Systemstart zu aktivieren. Verwenden Sie den SystemCTL -Status NGINX, um zu überprüfen, ob das Startup erfolgreich ist. Besuchen Sie http: // localhost in einem Webbrowser, um die Standard -Begrüßungsseite anzuzeigen.

So überprüfen Sie die Nginx -Version So überprüfen Sie die Nginx -Version Apr 14, 2025 am 11:57 AM

Die Methoden, die die Nginx -Version abfragen können, sind: Verwenden Sie den Befehl nginx -v; Zeigen Sie die Versionsrichtlinie in der Datei nginx.conf an. Öffnen Sie die Nginx -Fehlerseite und sehen Sie sich den Seitentitel an.

See all articles