Heim > Artikel > Backend-Entwicklung > Beispiel für die Einstellung des Nginx-Lastausgleichs
Das größte Highlight von Nginx ist der Reverse-Proxy und der Lastausgleich. In diesem Artikel wird die Konfiguration des Nginx-Lastausgleichs ausführlich erläutert.
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 ein bestimmter Server aufgrund einer hohen Last nicht ausfällt und ein bestimmter Server im Leerlauf ist. 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
Eine Server-IP: 192.168.5.149 (Haupt)
B-Server-IP: 192.168.5.27
C-Server-IP: 192.168.5.126
Bereitstellungsideen
Server A dient als Hauptserver, und der Domänenname wird direkt auf Server A (192.168.5.149) aufgelöst, und Server A erhält einen Lastausgleich auf Server B (192.168.5.27) und Server C (192.168.5.126).
Wie im Bild gezeigt:
Auflösung des Domainnamens
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 am Ende
hinzu
192.168.5.149 a.com
Speichern und beenden, dann den Befehlsmodus starten und pingen, um zu sehen, ob die Einstellung erfolgreich ist
Dem Screenshot nach zu urteilen, wurde a.com erfolgreich in 192.168.5.149IP
aufgelöst
Ein Server nginx.conf-Einstellungen
Öffnen Sie nginx.conf. Der Speicherort der Datei befindet sich im Verzeichnis conf des Nginx-Installationsverzeichnisses.
Fügen Sie den folgenden Code zum http-Abschnitt hinzu
<code>upstream a<span>.</span>com { server <span>192.168</span><span>.5</span><span>.126</span>:<span>80</span>; server <span>192.168</span><span>.5</span><span>.27</span>:<span>80</span>; } server{ listen <span>80</span>; server_name a<span>.</span>com; location <span>/</span> { proxy_pass http:<span>//a.com;</span> proxy_set_header Host <span>$host</span>; proxy_set_header X<span>-Real</span><span>-IP</span><span>$remote_addr</span>; proxy_set_header X<span>-Forwarded</span><span>-For</span><span>$proxy_add_x_forwarded_for</span>; } }</code>
Speichern Sie Nginx und starten Sie es neu
B. C-Server nginx.conf-Einstellungen
Öffnen Sie nginx.conf und fügen Sie den folgenden Code zum http-Abschnitt hinzu:
<code><span>server</span>{ listen <span>80</span>; server_name a.com; <span>index</span><span>index</span>.html; root /data0/htdocs/www; }</code>
Speichern und starten Sie nginx neu
Testen Sie
Um beim Zugriff auf a.com zu unterscheiden, an welchen Server es zur Verarbeitung weitergeleitet wird, habe ich zur Unterscheidung eine index.html-Datei mit unterschiedlichen Inhalten unter den Servern B und C geschrieben.
Öffnen Sie den Browser, um auf a.com zuzugreifen. Wenn Sie ihn aktualisieren, werden Sie feststellen, dass alle Anforderungen vom Hauptserver (192.168.5.149) an Server B (192.168.5.27) und Server C (192.168.5.126) verteilt werden, wodurch eine Auslastung erreicht wird ausgleichende Wirkung.
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. Gehen wir davon aus, dass der C-Server 192.168.126 der Maschine ausgefallen ist (da es unmöglich ist, die Ausfallzeit zu simulieren, also habe ich den C-Server heruntergefahren) und ihn dann erneut besucht.
Besuchsergebnisse:
Wir haben festgestellt, dass der Website-Zugriff nicht beeinträchtigt war, obwohl der C-Server (192.168.5.126) ausgefallen war. Auf diese Weise müssen Sie sich keine Sorgen darüber machen, dass die gesamte Site heruntergefahren wird, weil ein bestimmter Computer im Lastausgleichsmodus ausgefallen ist.
Was ist, wenn b.com auch einen Lastausgleich einrichten muss?
Es ist sehr einfach, genau wie die.com-Einstellungen. Wie folgt:
Gehen Sie davon aus, dass die Hauptserver-IP von b.com 192.168.5.149 lautet und die Last auf die Maschinen 192.168.5.150 und 192.168.5.151 verteilt ist
Lösen Sie nun den Domainnamen b.com in 192.168.5.149IP auf.
Fügen Sie den folgenden Code zur nginx.conf des Hauptservers (192.168.5.149) hinzu:
<code>upstream b<span>.</span>com { server <span>192.168</span><span>.5</span><span>.150</span>:<span>80</span>; server <span>192.168</span><span>.5</span><span>.151</span>:<span>80</span>; } server{ listen <span>80</span>; server_name b<span>.</span>com; location <span>/</span> { proxy_pass http:<span>//b.com;</span> proxy_set_header Host <span>$host</span>; proxy_set_header X<span>-Real</span><span>-IP</span><span>$remote_addr</span>; proxy_set_header X<span>-Forwarded</span><span>-For</span><span>$proxy_add_x_forwarded_for</span>; } }</code>
Nginx speichern und neu starten
Richten Sie nginx auf den Maschinen 192.168.5.150 und 192.168.5.151 ein, öffnen Sie nginx.conf und fügen Sie am Ende den folgenden Code hinzu:
<code><span>server</span>{ listen <span>80</span>; server_name b.com; <span>index</span><span>index</span>.html; root /data0/htdocs/www; }</code>
保存重启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加入以下一段代码:
<code><span>server</span>{ listen <span>8080</span>; server_name a.com; <span>index</span><span>index</span>.html; root /data0/htdocs/www; }</code>
重启nginx,在浏览器输入a.com:8080试试看能不能访问。结果可以正常访问
既然能正常访问,那么我们就可以把主服务器添加到upstream中,但是端口要改一下,如下代码:
<code>upstream a.com { <span>server</span><span>192.168</span><span>.5</span><span>.126</span>:<span>80</span>; <span>server</span><span>192.168</span><span>.5</span><span>.27</span>:<span>80</span>; <span>server</span><span>127.0</span><span>.0</span><span>.1</span>:<span>8080</span>; }</code>
由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。
重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。
主服务器也能正常加入服务了。
最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。
二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。
三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。
四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上。
http://www.qttc.net/201208181.html
以上就介绍了Nginx负载均衡设置实例,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。