Maison >développement back-end >tutoriel php >Question d'entretien PHP 7 : Comment configurer l'équilibrage de charge nginx
Le contenu de cet article explique comment configurer l'équilibrage de charge de nginx dans la question d'entretien PHP 7. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
Équilibrage de chargeInterrogation (par défaut)
Chaque requête est attribuée à un serveur back-end différent une par une dans l'ordre chronologique. Si le serveur back-end tombe en panne, il peut être automatiquement éliminé.
2),
poids
Spécifiez la probabilité d'interrogation, le poids est proportionnel au taux d'accès et est utilisé lorsque les performances du serveur principal sont inégales.
2),
ip_hash
Chaque requête est allouée en fonction du résultat de hachage de l'adresse IP d'accès, de sorte que chaque visiteur dispose d'un accès fixe à un serveur back-end, ce qui peut résoudre le problème de session.
3),
équitable (tiers)
Les requêtes sont allouées en fonction du temps de réponse du serveur back-end, et celles avec des temps de réponse courts sont allouées en premier.
4),
url_hash (tiers)
upstream webname { server 192.168.0.1:8080; server 192.168.0.2:8080; }Le nom du site est le nom que vous choisissez. Il sera accessible dans l'URL via ce nom. Comme dans l'exemple ci-dessus, si rien n'est ajouté, le sondage par défaut sera effectué. accédé. Le premier serveur, la deuxième demande d'accès au deuxième serveur. Venez à votre tour.
upstream webname { server 192.168.0.1:8080 weight 2; server 192.168.0.2:8080 weight 1; }Ce poids est également facile à comprendre. Plus le poids est lourd, plus la probabilité d'être accédé est grande. Dans l'exemple ci-dessus, le serveur1 est accédé deux fois et le serveur2 est accédé une fois .
upstream webname { ip_hash; server 192.168.0.1:8080; server 192.168.0.2:8080; }ip_hash La configuration est également très simple, il suffit d'ajouter une ligne, pour que toute personne venant de la même IP aille sur le même serveur puis de le configurer sous le nœud du serveur :
location /name { proxy_pass http://webname/name/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }proxy_pass Le nom Web configuré ci-dessus remplace l'adresse IP d'origine. Cela termine essentiellement la configuration de l'équilibrage de charge. Ce qui suit est la configuration de l'actif et de la sauvegarde : Toujours en amont
upstream webname { server 192.168.0.1:8080; server 192.168.0.2:8080 backup; }Définissez un certain nœud comme sauvegarde, puis dans des circonstances normales, toutes les demandes seront accéder au serveur1. Le serveur1 n'accédera au serveur2 que lorsque le serveur1 raccroche ou est occupé
upstream webname { server 192.168.0.1:8080; server 192.168.0.2:8080 down; }Définissez un nœud vers le bas, ce serveur ne participera pas au chargement. Exemple d'implémentationL'équilibrage de charge est quelque chose que notre site Web à fort trafic doit faire. Je vais maintenant vous présenter la méthode de configuration de l'équilibrage de charge sur le serveur Nginx. aux étudiants dans le besoin. Équilibrage de chargeCommençons par comprendre brièvement ce qu'est l'équilibrage de charge. Pour le comprendre littéralement, cela peut expliquer que N serveurs partagent la charge de manière égale, et ce ne sera pas le cas parce qu'un certain serveur a un serveur. charge élevée. Une situation dans laquelle un serveur est en panne et un serveur est inactif. Ensuite, le principe de l'équilibrage de charge est qu'il peut être réalisé par plusieurs serveurs, c'est-à-dire que plus de deux serveurs suffisent. Environnement de test
Comme il n'y a pas de serveur, ce test héberge directement le nom de domaine spécifié, puis installe trois CentOS dans VMware.
Un serveur est utilisé comme serveur principal, le nom de domaine est directement résolu en serveur A (192.168.5.149) et la charge du serveur A est équilibrée en serveur B ( 192.168.5.27) et C sur le serveur (192.168.5.126).
C:WindowsSystem32driversetchosts
192.168.5.149 a.comà la fin pour enregistrer et quitter, puis démarrer le mode commande et pinger pour voir si le réglage est réussi À en juger par la capture d'écran, a.com a été analysé avec succès en 192.168.5.149IP Paramètres nginx.conf d'un serveur
Ouvrez nginx.conf et l'emplacement du fichier est dans la conf répertoire du répertoire d'installation de nginx.
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; } }Enregistrez et redémarrez nginxParamètres nginx.conf du serveur B et C
Ouvrez nginx.confi et ajoutez dans la section http Le code suivant
server{ listen 80; server_name a.com; index index.html; root /data0/htdocs/www; }Enregistrer et redémarrer nginxTest
Lors de l'accès à a.com, afin de distinguer vers quel serveur transférer pour le traitement, je en a écrit un sous les serveurs B et C respectivement. fichiers Index.html avec des contenus différents pour les distinguer.
Lorsqu'un serveur tombe en panne, l'accès sera-t-il affecté ?
如果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; } }
保存重启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; }
保存重启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; }
重启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; }
由于这里可以添加主服务器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面试题五之nginx如何调用php和php-fpm的作用和工作原理
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!