Maison  >  Article  >  Opération et maintenance  >  Limite de connexion au serveur proxy inverse Nginx et méthode de réglage de la file d'attente des demandes

Limite de connexion au serveur proxy inverse Nginx et méthode de réglage de la file d'attente des demandes

PHPz
PHPzoriginal
2023-08-08 10:37:452566parcourir

Limite de connexion au serveur proxy inverse Nginx et méthode de réglage de la file dattente des demandes

Limite de connexion au serveur proxy inverse Nginx et méthode de réglage de la file d'attente des demandes

Le serveur proxy inverse Nginx est un choix très courant et fiable lors de l'exécution d'applications réseau à haute concurrence. Toutefois, si les limites de connexion et les files d'attente de requêtes ne sont pas correctement configurées, le serveur peut rencontrer des goulots d'étranglement en termes de performances et des problèmes de déni de service. Cet article expliquera comment utiliser Nginx pour limiter le nombre de connexions et optimiser la file d'attente des requêtes.

Limite de connexion

Nginx peut limiter le nombre de connexions en définissant le paramètre worker_connections. Ce paramètre spécifie le nombre maximum de connexions que chaque processus de travail peut gérer simultanément. Lorsque le nombre de connexions atteint cette limite, les nouvelles connexions seront rejetées.

Ouvrez le fichier de configuration Nginx, recherchez le bloc http et ajoutez ou modifiez la ligne suivante :

http {
  ...
  worker_processes  auto;
  worker_connections  1024;
  ...
}

Dans l'exemple ci-dessus, worker_connections est défini sur 1024, ce qui signifie que chaque processus de travail peut gérer 1024 connexions simultanément. En fonction des performances matérielles du serveur et des exigences des applications, vous pouvez effectuer des ajustements en fonction des conditions réelles. Veuillez noter que la valeur de work_processes doit être définie sur un multiple du nombre de cœurs de processeur pour utiliser pleinement les ressources du serveur.

Réglage de la file d'attente des demandes

Lorsque le nombre de connexions simultanées dépasse la limite worker_connections, Nginx placera la demande dans la file d'attente en attente de traitement. Vous pouvez ajuster la longueur et le délai d'attente des demandes pour minimiser le risque de déni de service.

Procédez à l'édition du fichier de configuration Nginx et ajoutez ou modifiez la ligne suivante :

http {
  ...
  events {
    accept_mutex off;
    worker_connections  1024;
    worker_processes  auto;
    multi_accept on;
    use epoll;
    ...
  }
  ...
  server {
    ...
    location / {
      proxy_pass http://backend;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_http_version  1.1;
      proxy_set_header        Upgrade $http_upgrade;
      proxy_set_header        Connection "upgrade";
      proxy_read_timeout      600s;
      proxy_connect_timeout   600s;
      proxy_send_timeout      600s;
      proxy_buffer_size       128k;
      proxy_buffers           4 256k;
      proxy_busy_buffers_size 256k;
      proxy_buffering         on;
      ...
    }
    ...
  }
}

Dans l'exemple ci-dessus, nous avons apporté plusieurs réglages à la file d'attente des requêtes. Tout d'abord, en désactivant accept_mutex, nous désactivons le mutex afin que plusieurs processus de travail puissent accepter de nouvelles connexions en même temps. Deuxièmement, définissez multi_accept sur on pour que Nginx traite toutes les requêtes de la file d'attente le plus rapidement possible. Enfin, nous définissons le délai d'attente et la taille du tampon en fonction des besoins réels.

Exemple de code

Vous trouverez ci-dessous un exemple de serveur Node.js simple, simulant une application backend.

const http = require('http');

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!
');
});

server.listen(3000, 'localhost', () => {
  console.log('Server running at http://localhost:3000/');
});

Dans l'exemple ci-dessus, nous avons créé un simple serveur HTTP en écoute sur le port local 3000. Puisque ce serveur est uniquement destiné à des fins de démonstration, il renverra simplement une simple chaîne "Hello, World!".

Pour utiliser Nginx comme serveur proxy inverse, vous devez enregistrer l'exemple de code ci-dessus sous forme de fichier appelé server.js et exécuter la commande suivante pour démarrer le serveur : server.js的文件,并执行以下命令来启动服务器:

node server.js

接下来,将以下Nginx配置保存为一个名为nginx.conf的文件:

http {
  ...
  server {
    listen 80;
    location / {
      proxy_pass http://localhost:3000;
    }
  }
}

通过执行以下命令来启动Nginx:

nginx -c /path/to/nginx.conf

现在,您可以通过访问http://localhostrrreee

Ensuite, ajoutez The La configuration Nginx suivante est enregistrée sous forme de fichier nommé nginx.conf :

rrreee

Démarrez Nginx en exécutant la commande suivante :

rrreee

Maintenant, vous pouvez y accéder en visitant http://localhost pour accéder à votre application. Toutes les requêtes seront proxy et équilibrées de charge via le serveur Nginx. 🎜🎜Résumé🎜🎜En limitant le nombre de connexions et en ajustant la file d'attente des requêtes, vous pouvez mieux gérer les applications réseau à haute concurrence. Ce qui précède décrit comment utiliser Nginx pour limiter le nombre de connexions et optimiser la file d'attente des requêtes, et fournit un exemple simple de code de serveur Node.js. Veuillez effectuer les ajustements de configuration appropriés en fonction des besoins réels et des performances matérielles du serveur. 🎜

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:
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