Maison >Opération et maintenance >Nginx >Comment équilibrer la charge de Nginx
1. Proxy inverse Nginx
Avant d'introduire l'équilibrage de charge de nginx, nous introduisons d'abord le proxy inverse de nginx. Étant donné que les proxys inverses sont couramment utilisés, nous ne présenterons pas le proxy direct ici.
Le processus proxy de nginx consiste à envoyer la demande à nginx, puis à transmettre la demande au serveur back-end, et au retour -end le serveur termine le traitement. Ensuite, les résultats sont envoyés à nginx, et nginx envoie ensuite les résultats au client. Le serveur backend peut être distant ou local, ou il peut s'agir d'un autre hôte virtuel défini au sein du serveur nginx. Ces serveurs qui reçoivent le transfert nginx sont appelés en amont
L'un des objectifs de l'utilisation de nginx comme proxy est d'étendre l'échelle de l'infrastructure. nginx peut gérer un grand nombre de connexions simultanées. Après l'arrivée d'une requête, nginx peut la transmettre à n'importe quel nombre de serveurs d'arrière-plan pour traitement, ce qui équivaut à distribuer l'équilibrage de charge sur l'ensemble du cluster.
Syntaxe : proxy_pass URL
Explication : L'URL peut être sous la forme : http://location:8000/uri/, etc., qui peuvent être trouvés dans Configurer sur place.
Exemple : Écrivons un proxy inverse simple :
Il n'y a pas de fichier test_proxy dans le répertoire où j'écoute sur le port 80, mais dans mon répertoire d'écoute du port 8080, j'ai ajouté le contenu suivant au serveur sur le port 80 :
emplacement ~ /test_proxy.html$ {proxy_pass http://127.0.0.1:8080;}
Puis entrez http://adresse IP/test_proxy.html sur le navigateur, et les informations demandées apparaîtront. En fait, le port 80 est transféré vers le port 8080 et les données sont demandées.
2. Mise en mémoire tampon
nginx fournit également un mécanisme de mise en mémoire tampon pour améliorer les performances. Sans mise en mémoire tampon, les données sont envoyées directement du serveur backend au client. La fonction de la mise en mémoire tampon est de stocker temporairement les résultats du traitement du serveur back-end sur nginx, afin que la connexion de nginx au back-end puisse être fermée plus tôt et réduire les pertes d'E/S. Généralement, le contenu est stocké en mémoire, mais lorsqu'il y a trop de contenu et une mémoire insuffisante, le contenu sera stocké dans un répertoire de fichiers temporaire. Voici quelques éléments de configuration de mise en mémoire tampon couramment utilisés, qui peuvent être trouvés sous les blocs de contenu http, serveur et emplacement.
proxy_buffering : Contrôlez si la mise en mémoire tampon est activée sous ce bloc de contenu, la valeur par défaut est "on".
proxy_buffers : Il existe deux paramètres, le premier contrôle le nombre de requêtes de tampon et le second contrôle la taille du tampon. La valeur par défaut est 8, une page (généralement 4k ou 8k). Plus la valeur est élevée, plus le contenu est mis en mémoire tampon.
proxy_buffer_size : Le premier segment du résultat de la réponse backend (la partie contenant l'en-tête) est mis en mémoire tampon séparément. Cette configuration consiste à configurer la taille de cette partie de. le tampon. Cette valeur par défaut est la même que proxy_buffer. Nous pouvons la définir plus petite car le contenu de l'en-tête est généralement moindre.
proxy_busy_buffers_size : Définit la taille des tampons marqués comme « prêts pour le client ». Le client ne peut lire les données que d'un seul tampon à la fois, et le tampon est envoyé au client par lots dans l'ordre de la file d'attente. Cette syntaxe configure la taille de cette file d'attente.
proxy_temp_path : Définissez le chemin du fichier temporaire de stockage nginx.
proxy_max_temp_file_size : La taille du répertoire pouvant stocker les fichiers temporaires par requête. Si les résultats envoyés depuis l'amont sont trop volumineux pour tenir dans un tampon, nginx créera des fichiers temporaires pour eux.
3. Équilibrage de charge
Syntaxe de configuration : nom en amont {.....}
Explication : le nom est un nom personnalisé et {} est le contenu qui doit être défini. Il ne peut être défini que dans le bloc http, pas dans le bloc serveur. Après l'avoir défini, vous pouvez écrire le code suivant sous le bloc location à appeler : http://name.
Exemple : En raison de la limitation du nombre de serveurs, nous utilisons ici différents ports d'un serveur pour simuler l'équilibrage de charge. Bien entendu, les configurations de plusieurs serveurs sont similaires.
Ajoutez le code suivant dans le bloc serveur :
test en amont {#ip_hash IP du serveur:8001; IP du serveur:8002; IP du serveur:8003; }
Ensuite, nous ajoutons le contenu suivant à l'emplacement dans le bloc http :
emplacement / {#Définissez l'en-tête de l'hôte et la véritable adresse du client afin que le serveur puisse obtenir la véritable adresse IP du client proxy_set_header Host $http_host; proxy_set_header 60; proxy_read_timeout 60; proxy_buffer_size 32k #Définir la taille du tampon proxy_buffering on; #Open buffer proxy_buffers 4 128k; #Définir le nombre et la taille des tampons proxy_busy_buffers_size 256k; #Définir la taille du tampon prêt pour le client proxy_max_temp_file_size 256k; proxy_pass http://test; #Appelez l'équilibrage de charge défini ci-dessus }Bien sûr, nous devons vous rappeler que l'IP que nous définissons Le port est configuré à l'avance dans le fichier de configuration. Par exemple, la configuration suivante.
Ensuite, nous accédons à notre adresse d'hôte, puis la rafraîchissons en continu, et nous trouverons les informations de la page sortant de chaque port. L'équilibrage de charge par défaut utilise l'interrogation.
Si vous utilisez différents serveurs pour l'équilibrage de charge, il vous suffit d'apporter de légères modifications, comme la configuration suivante :
en amont mondomaine.com{serveur 47.95.242.167:80; serveur 47.95.242.168:80 }
Après la configuration, le code restant en http est similaire à celui ci-dessus, puis dans les trois autres serveurs, faites-y la configuration suivante. Bien entendu, nous devons encore configurer les pare-feu sur ces trois serveurs.
serveur{
écouter 80 ; nom_serveur www.mydomain.com; index index.htm index.php index.html; chemin du répertoire racine;}
①L'état du serveur backend dans la planification de l'équilibrage de charge
dowm : actuel Le Le serveur ne participe pas à l'équilibrage de charge pour le moment.
sauvegarde : Serveur de sauvegarde réservé.
max_fails : Le nombre d'échecs de requêtes autorisés.
fail_timeout : La durée pendant laquelle le serveur fait une pause après l'échec de max_fails.
max_conns : Limiter le nombre maximum de connexions de réception.
Remarque : La configuration ci-dessus est configurée en amont. Par exemple, l'IP du serveur : 8001 dowm ajoutée dans {} signifie que ce service est Il ne participe pas. dans l'équilibrage de charge et est utilisé pour la sauvegarde. Les configurations ci-dessus sont écrites derrière le service.
②Algorithme de planification Polling : attribué aux différents serveurs backend un par un dans l'ordre chronologique. Interrogation pondérée : vous pouvez ajouter un poids = nombre après le serveur configuré. Plus la valeur du nombre est élevée, plus la probabilité d'attribution est grande. ip_hash : Chaque requête est allouée en fonction du hachage de l'IP d'accès, afin que l'accès depuis la même IP à un serveur backend soit fixe. least_hash : Le nombre minimum de liens, quelle que soit la machine ayant le moins de connexions, sera distribué à la machine. url_hash : distribuez les requêtes en fonction du résultat de hachage de l'URL consultée et dirigez chaque URL vers le même serveur backend. Valeur de la clé de hachage : clé personnalisée de hachage. Remarque : L'algorithme de planification est configuré dans les paramètres en amont. Par exemple, écrire ip_hash entre accolades signifie utiliser ip_hash pour allouer Plus Pour plus d'articles techniques liés à Nginx, veuillez visiter la colonne Tutoriel Nginx pour apprendre !
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!