Maison développement back-end tutoriel php Question d'entretien PHP 7 : Comment configurer l'équilibrage de charge nginx

Question d'entretien PHP 7 : Comment configurer l'équilibrage de charge nginx

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

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 charge


L'équilibrage de charge nginx dispose de 4 modes :

1),

Interrogation (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)

Méthode de configuration :

Ouvrir le fichier nginx.cnf

Ajouter un nœud en amont sous le nœud http :

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080;  
}
Copier après la connexion
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;  
}
Copier après la connexion
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;  
}
Copier après la connexion
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";  
}
Copier après la connexion
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;  
}
Copier après la connexion
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;  
}
Copier après la connexion
Définissez un nœud vers le bas, ce serveur ne participera pas au chargement.

Exemple d'implémentation

L'é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 charge

Commenç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.

Nom de domaine de test : a.com

IP du serveur A : 192.168.5.149 (principal)

IP du serveur B : 192.168.5.27

Serveur C IP :192.168.5.126

Idée de déploiement

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).

Résolution du nom de domaine

Comme il ne s'agit pas d'un environnement réel, le nom de domaine est juste a.com à des fins de test, donc la résolution de a.com ne peut être définie que dans le fichier hosts.

Ouvrir :

C:WindowsSystem32driversetchosts

Ajouter

192.168.5.149    a.com
Copier après la connexion
à 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.

Ajoutez le code suivant dans la section http

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; 
    } 
}
Copier après la connexion
Enregistrez et redémarrez nginx

Paramè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; 
}
Copier après la connexion
Enregistrer et redémarrer nginx

Test

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.

Ouvrez le navigateur pour accéder à a.com Refresh et vous constaterez que toutes les requêtes sont allouées par le serveur principal (192.168.5.149) au serveur B (192.168.5.27) et au serveur C (192.168.5.126). . Effet d'équilibrage de charge obtenu.

Page de traitement du serveur B

Page de traitement du serveur C

Et si l'un des serveurs tombe en panne ?

Lorsqu'un serveur tombe en panne, l'accès sera-t-il affecté ?

Jetons d'abord un coup d'œil à l'exemple. Sur la base de l'exemple ci-dessus, supposons que le serveur C de la machine 192.168.5.126 est en panne (car il est impossible de simuler le temps d'arrêt, j'ai donc arrêté le serveur C) puis visitez-le à nouveau.

Résultats d'accès :

Nous avons constaté que même si le serveur C (192.168.5.126) était en panne, cela n'affectait pas l'accès au site Web. De cette façon, vous n'aurez pas à vous soucier de faire glisser l'ensemble du site car une certaine machine est en panne en mode d'équilibrage de charge.

如果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; 
    } 
}
Copier après la connexion

保存重启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; 
}
Copier après la connexion

保存重启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; 
}
Copier après la connexion

重启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; 
}
Copier après la connexion

由于这里可以添加主服务器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

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

L'accès au fichier du site WordPress est restreint: pourquoi mon fichier .txt n'est-il pas accessible via le nom de domaine? L'accès au fichier du site WordPress est restreint: pourquoi mon fichier .txt n'est-il pas accessible via le nom de domaine? Apr 01, 2025 pm 03:00 PM

L'accès au fichier du site WordPress est restreint: dépannage de la raison pour laquelle le fichier .txt ne peut pas être accessible récemment. Certains utilisateurs ont rencontré un problème lors de la configuration du nom de domaine commercial du programme MINI: � ...

Top 10 des plateformes CMS PHP pour les développeurs en 2024 Top 10 des plateformes CMS PHP pour les développeurs en 2024 Dec 05, 2024 am 10:29 AM

CMS signifie Système de gestion de contenu. Il s'agit d'une application logicielle ou d'une plate-forme qui permet aux utilisateurs de créer, gérer et modifier du contenu numérique sans nécessiter de connaissances techniques avancées. Le CMS permet aux utilisateurs de créer et d'organiser facilement du contenu tel que du texte, des images, des vidéos et des documents, et de le publier sur des sites Web ou d'autres plateformes numériques.

PHP et médias sociaux : intégrez votre site Web au monde PHP et médias sociaux : intégrez votre site Web au monde Oct 11, 2024 am 11:54 AM

PHP fournit des outils permettant aux sites Web d'intégrer facilement les fonctions de médias sociaux : 1. Générer dynamiquement des boutons de partage de médias sociaux permettant aux utilisateurs de partager du contenu ; 2. Intégrer la bibliothèque OAuth pour obtenir une connexion transparente aux médias sociaux ; 3. Utiliser la bibliothèque HTTP pour capturer les réseaux sociaux ; Données multimédias, obtenir un profil utilisateur, des publications et d'autres informations.

See all articles