Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Verbindungslimit für den Nginx-Reverse-Proxy-Server und Optimierungsmethode für die Anforderungswarteschlange

Verbindungslimit für den Nginx-Reverse-Proxy-Server und Optimierungsmethode für die Anforderungswarteschlange

PHPz
PHPzOriginal
2023-08-08 10:37:452518Durchsuche

Verbindungslimit für den Nginx-Reverse-Proxy-Server und Optimierungsmethode für die Anforderungswarteschlange

Nginx-Reverse-Proxy-Server-Verbindungslimit und Methode zur Optimierung der Anforderungswarteschlange

Der Nginx-Reverse-Proxy-Server ist eine sehr häufige und zuverlässige Wahl, wenn Netzwerkanwendungen mit hoher Parallelität ausgeführt werden. Wenn Verbindungsbeschränkungen und Anforderungswarteschlangen jedoch nicht ordnungsgemäß konfiguriert sind, kann es auf dem Server zu Leistungsengpässen und Denial-of-Service-Problemen kommen. In diesem Artikel wird erläutert, wie Sie mit Nginx die Anzahl der Verbindungen begrenzen und die Anforderungswarteschlange optimieren können.

Verbindungslimit

Nginx kann die Anzahl der Verbindungen begrenzen, indem es den Parameter worker_connections setzt. Dieser Parameter gibt die maximale Anzahl von Verbindungen an, die jeder Arbeitsprozess gleichzeitig verarbeiten kann. Wenn die Anzahl der Verbindungen dieses Limit erreicht, werden neue Verbindungen abgelehnt.

Öffnen Sie die Nginx-Konfigurationsdatei, suchen Sie den http-Block und fügen Sie die folgende Zeile hinzu oder ändern Sie sie:

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

Im obigen Beispiel ist worker_connections auf 1024 gesetzt, was bedeutet, dass jeder Arbeitsprozess 1024 Verbindungen gleichzeitig verarbeiten kann. Abhängig von der Hardwareleistung des Servers und den Anwendungsanforderungen können Sie Anpassungen basierend auf den tatsächlichen Bedingungen vornehmen. Bitte beachten Sie, dass der Wert von worker_processes auf ein Vielfaches der Anzahl der CPU-Kerne gesetzt werden sollte, um die Serverressourcen vollständig auszunutzen.

Anforderungswarteschlangenoptimierung

Wenn die Anzahl gleichzeitiger Verbindungen das worker_connections-Limit überschreitet, stellt Nginx die Anforderung in die Warteschlange und wartet auf die Verarbeitung. Sie können die Länge und das Zeitlimit der Anforderungswarteschlange anpassen, um die Möglichkeit einer Dienstverweigerung zu minimieren.

Fahren Sie mit der Bearbeitung der Nginx-Konfigurationsdatei fort und fügen Sie die folgende Zeile hinzu oder ändern Sie sie:

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;
      ...
    }
    ...
  }
}

Im obigen Beispiel haben wir mehrere Optimierungen an der Anforderungswarteschlange vorgenommen. Indem wir „accept_mutex“ auf „off“ setzen, deaktivieren wir zunächst den Mutex, sodass mehrere Arbeitsprozesse gleichzeitig neue Verbindungen akzeptieren können. Zweitens setzen Sie multi_accept auf on, damit Nginx alle Anfragen in der Warteschlange so schnell wie möglich verarbeitet. Abschließend stellen wir das Timeout und die Puffergröße entsprechend den tatsächlichen Anforderungen ein.

Codebeispiel

Unten finden Sie ein Beispiel für einen einfachen Node.js-Server, der eine Backend-Anwendung simuliert.

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/');
});

Im obigen Beispiel haben wir einen einfachen HTTP-Server erstellt, der den lokalen Port 3000 überwacht. Da dieser Server nur zu Demonstrationszwecken dient, gibt er lediglich eine einfache Zeichenfolge „Hello, World!“ zurück.

Um Nginx als Reverse-Proxy-Server zu verwenden, müssen Sie den obigen Beispielcode als Datei mit dem Namen server.js speichern und den folgenden Befehl ausführen, um den Server zu starten: 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

Als nächstes fügen Sie The hinzu Die folgende Nginx-Konfiguration wird als Datei mit dem Namen nginx.conf gespeichert:

rrreee

Starten Sie Nginx, indem Sie den folgenden Befehl ausführen:

rrreee

Jetzt können Sie darauf zugreifen, indem Sie http://localhost besuchen um auf Ihre Anwendung zuzugreifen. Alle Anfragen werden per Proxy und Lastausgleich über den Nginx-Server weitergeleitet. 🎜🎜Zusammenfassung🎜🎜Durch die Begrenzung der Anzahl der Verbindungen und die Optimierung der Anforderungswarteschlange können Sie hochgradig gleichzeitige Webanwendungen besser verwalten. Oben wird beschrieben, wie Nginx verwendet wird, um die Anzahl der Verbindungen zu begrenzen und die Anforderungswarteschlange zu optimieren, und es wird ein einfaches Codebeispiel für den Node.js-Server bereitgestellt. Bitte nehmen Sie entsprechend den tatsächlichen Anforderungen und der Hardwareleistung des Servers entsprechende Konfigurationsanpassungen vor. 🎜

Das obige ist der detaillierte Inhalt vonVerbindungslimit für den Nginx-Reverse-Proxy-Server und Optimierungsmethode für die Anforderungswarteschlange. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn