GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Nginx-Leistungsoptimierung

Nginx ist ein kostenloser Open-Source-Webserver mit hoher Leistung und geringem Gewicht, der als Load Balancer, Reverse-Proxy, HTTP-Cache und Mail-Proxy verwendet wird. Obwohl Nginx im Vergleich zu anderen Webservern recht neu ist, nimmt seine Popularität aufgrund seiner hohen Leistung zu. Mit der Standardkonfiguration von Nginx erhalten Sie möglicherweise eine schnelle Leistung, aber wir können die Leistung von Nginx noch weiter steigern, indem wir einige Konfigurationen ändern.

In diesem Artikel lernen Sie 8 verschiedene Möglichkeiten kennen, um die Leistung von Nginx zu verbessern. Um das Beispiel in diesem Artikel zu veranschaulichen, habe ich Nginx auf dem Ubuntu 22.04 LTS-System installiert.

Worker-Prozesse ändern

Alle Webserver-Anfragen in Nginx werden von einem Arbeitsprozess verarbeitet. In Nginx werden die Worker-Prozesse als mehrere Worker-Prozesse erstellt, um die Anfrage zu bearbeiten, und ein Master-Prozess ist für die Verwaltung aller Worker-Prozesse und die Analyse der Konfiguration verantwortlich. In der Standardkonfiguration von Nginx ist der Worker-Prozess-Parameter auf auto gesetzt, wodurch der Worker-Prozess abhängig vom verfügbaren CPU-Kern gestartet wird. Wie in den offiziellen Dokumenten von Nginx empfohlen, ist es der beste Weg, den Worker-Prozess entsprechend dem verfügbaren CPU-Kern zu halten, daher ist auto der empfohlene Parameter. Wenn Sie wissen möchten, wie viele Kerne Ihre Prozessoren haben, führen Sie einfach den folgenden Befehl aus.

$ grep processor /proc/cpuinfo | wc -l

Sie können den Standardwert des Arbeitsprozesses in der Nginx-Konfigurationsdatei ändern, die sich unter /etc/nginx/nginx.conf befindet. Wenn auf Ihrem Server ein höherer Datenverkehr auftritt und Sie weitere Worker-Prozesse hinzufügen müssen, ist es besser, den Server auf mehr Kernprozessoren aufzurüsten.

Verbesserung des Worker-Verbindungslimits

Worker-Verbindung ist die Gesamtzahl gleichzeitiger Verbindungen, die jeder verfügbare Worker-Prozess verwalten kann. Standardmäßig kann der Arbeitsprozess 512 Verbindungen gleichzeitig verwalten. Bevor Sie den Worker-Verbindungswert ändern, müssen Sie das Max-Verbindungssystem überprüfen, um die Verwendung des folgenden Befehls zuzulassen, um die Verbindungskonfiguration entsprechend zu aktualisieren.

$ ulimit -n

Um das volle Potenzial von Nginx auszuschöpfen, setzen Sie den Worker-Verbindungswert auf die maximale Verbindung, die das System in der Datei nginx.conf zulässt.

Inhaltskomprimierung implementieren

Für die Komprimierung von Webinhalten verwendet Nginx gzip, um die Bereitstellungszeit von Inhalten zu verlängern und die Nutzung der Netzwerkbandbreite zu verringern. In der Konfiguration finden Sie die gzip-Konfiguration im kommentierten Zustand, aber Sie können die gzip-Datei nach Bedarf auskommentieren und ändern. Da der gzip-Komprimierungsprozess Systemressourcen verwendet, ändern Sie die Konfiguration entsprechend, wenn Sie nur über begrenzte Ressourcen verfügen, z. B. Komprimieren nur eines bestimmten Dateityps, einer bestimmten Komprimierungsstufe usw.

Statische Inhalte zwischenspeichern

In dieser modernen Webentwicklung werden die meisten Inhalte statisch an den Browser oder Client geliefert, sodass das Caching der statischen Dateien die Inhalte schneller lädt. Es wird auch die Verbindungsanfrage an Nginx verringern, wenn Inhalte aus dem Cache geladen werden. Um den Caching-Prozess zu starten, fügen Sie die folgende Anweisung zu Ihrer Konfigurationsdatei für den virtuellen Nginx-Host hinzu.

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;}

Die obige Anweisung speichert die Ressourcendatei für 30 Tage im Cache. Sie können das Ablaufdatum des Caches nach Bedarf einstellen.

Pufferung

Pufferung kann die Kommunikation zwischen Client und Server effizienter machen, da sie einen Teil der Antwort hält, bis der Puffer gefüllt ist. Wenn die Antwort zu hoch ist als die tatsächliche Puffergröße, schreibt Nginx die Antwort auf die Festplatte, was zu einem Leistungsproblem führen kann. Sie können die folgende Direktive aktualisieren, um die Puffergröße Ihren Anforderungen entsprechend anzupassen.

Client_body_buffer_size :Es bestimmt die tatsächliche Puffergröße, die verwendet wird, um Client-Antwortdaten zu speichern.

Client_header_buffer_size :Es verwaltet die Größe des Client-Headers. Normalerweise reicht es aus, den Wert auf 1k zu setzen.

Client_max_body_size :Es begrenzt die maximale Körperreaktion, die dem Client erlaubt ist. Wenn die Körpergröße ihren Wert überschreitet, gibt Nginx den Fehler „Request Entity Too Large“ aus.

Um die Puffergröße anzupassen, fügen Sie die folgende Anweisung in den http-Abschnitt ein.

http {
…
client_body_buffer_size 80k;
client_max_body_size 9m;
client_header_buffer_size 1k;
...
}

Auf Protokollpufferung zugreifen

Die Protokollierung ist eine der zentralen Rollen beim Debuggen des Problems und beim Auditieren. Da die Protokollierung alle Anforderungsdaten speichert, die sich sowohl auf E/A-Zyklen als auch auf die CPU auswirken, was zu Leistungsproblemen führt. Sie können diese Art von Auswirkungen verringern, indem Sie die Pufferung im Protokoll aktivieren. Sobald die Puffergröße ihr Limit erreicht, schreibt Nginx den Pufferinhalt in das Protokoll. Sie können die Pufferung aktivieren, indem Sie Pufferparameter mit Größenwerten zur Zugriffsprotokollanweisung hinzufügen.

access_log /var/log/nginx/access.log main buffer=16k;

Oder Sie können das Zugriffsprotokoll (falls nicht benötigt) auf folgende Weise deaktivieren.

access_log off;

Timeout-Werte begrenzen

Durch die Begrenzung des Timeout-Werts wird die Leistung von Nginx verbessert. Nginx wartet für den angegebenen Zeitraum auf die Body- und Header-Anfrage des Clients. Erhalten sie die Antwortdaten nicht rechtzeitig, löst Nginx einen Timeout für den jeweiligen Client aus. Der Timeout-Wert kann durch die folgende Direktive verwaltet werden. Kopieren Sie zum Festlegen der Timeout-Dauer die unten angegebene Anweisung in den http-Abschnitt.

client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 13;
send_timeout 10;

Client-Body- und Header-Timeout ist ein Zeitraum, in dem Nginx Header und Body aus der Client-Anfrage liest. Wenn die Anfrage nicht rechtzeitig abgeschlossen wird, wird die Anfrage mit einem Zeitüberschreitungsfehler beendet. Keepalive_timeout ist die Dauer, nachdem nginx die Clientverbindung geschlossen hat, wobei die Keepalive-Verbindung offen bleibt. Send_timeout ist die Dauer, für die der Client die von Nginx gesendete Antwort erhalten muss.

Dateicache öffnen

Unter Linux ist fast alles eine Datei, wenn open_file_cache verwendet wird, werden der Dateideskriptor und alle Dateien, auf die häufig zugegriffen wird, auf dem Server zwischengespeichert. Insbesondere beim Bereitstellen der statischen HTML-Dateien mit offenem Dateicache wird die Leistung von Nginx verbessert, da es den Cache für ein bestimmtes Intervall öffnet und im Speicher speichert. Fügen Sie die folgende Direktive von open_file_cache in den http-Abschnitt ein, um das Caching zu initiieren.

http {
...
open_file_cache max=1024 inactive=10s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

Schlussfolgerung

Dies sind acht Möglichkeiten, die Leistung eines Nginx-Webservers durch einfache Änderung der Nginx-Konfigurationsdatei zu steigern. Ich hoffe, dass die Lektüre dieses Artikels Ihnen hilft, Ihr Ngunx-Setup zu verbessern, um die höchstmögliche Leistung auf Ihrem Server, Server oder Cloud-System zu erzielen.


Linux
  1. Installieren Sie Nginx auf Fedora

  2. Installieren Sie Nginx auf Ubuntu

  3. dd-Leistung unter Mac OS X im Vergleich zu Linux

  4. Dateisystem-Leistungsoptimierungsoptionen für ext3

  5. getpwnam(www) ist in /etc/nginx/nginx.conf fehlgeschlagen

Installieren Sie Nginx Amplify unter CentOS 8/RHEL 8, um die LEMP-Leistung zu überwachen

So erhalten Sie die beste Leistung vom Nginx-Server

Wie man Worker-Verbindungen repariert, ist nicht genug Fehler auf Nginx

Wie wird NGINX für das kommende Jahr 2022 optimiert?

Installieren Sie Nginx auf Ubuntu 18.04

Einführung in die Linux-Leistungsüberwachung und -optimierung