Optimieren und Optimieren der Leistung von Nginx Web Server

Einführung

Nginx ist ein sehr schneller, robuster, leichter und leistungsstarker Webserver, auf dem mindestens 40% der am stärksten frequentierten Websites weltweit ausgeführt werden. Aufgrund der Vielseitigkeit von Nginx wird es auch als Load Balancer, Reverse Proxy und HTTP-Cache-Server verwendet.


Das Beste an Nginx ist seine Geschwindigkeit, mit der Tausende von gleichzeitigen Verbindungen problemlos verarbeitet werden können.

In diesem Artikel werden die besten Möglichkeiten zum Optimieren und Optimieren des Nginx-Webservers erläutert.

Voraussetzungen

  • Linux VPS Setup (Beliebiger Linux-Geschmack)
  • Grundlegendes Verständnis der Nginx-Konfiguration
  • Installiertes Nginx

Zum Optimieren und Optimieren von Nginx müssen die Parameter in der Standard-Nginx-Konfigurationsdatei /etc/nginx/nginx.conf angepasst werden.

Hier ist ein Beispiel für eine Standard-Nginx-Konfigurationsdatei /etc/nginx/nginx.conf

Benutzer www-Daten;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

Veranstaltungen {
worker_connections 768;
# multi_accept on;
}}

http {

##
# Grundeinstellungen
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
add_header X-XSS-Schutz "1; mode = block";;
add_header X-Frame-Optionen "SAMEORIGIN";;

# server_names_hash_bucket_size 64;
# Servername_in_redirect off;

include /etc/nginx/mime.types;
default_type application / octet-stream;

##
# SSL-Einstellungen
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSLv3 löschen, ref: POODLE
ssl_prefer_server_ciphers on;

##
# Protokollierungseinstellungen
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip-Einstellungen
##

gzip on;

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text / einfacher text / css anwendung / json anwendung / javascript text / xml anwendung / xml anwendung / xml + rss text / javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include / etc / nginx / sites-enabled / *;
}}

#mail {
# # Siehe Beispielauthentifizierungsskript unter:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost / auth.php;
# # pop3_capabilities "OBEN" "BENUTZER";;
# # imap_capabilities "IMAP4rev1" "UIDPLUS";;
#
# server {
# listen localhost: 110;
# protocol pop3;
# Proxy ein;
#}
#
# server {
# listen localhost: 143;
# protocol imap;
# Proxy ein;
#}
#}

Sichern Sie Ihre aktuelle Nginx-Konfigurationsdatei, bevor Sie sie bearbeiten, während Sie die Nginx-Optimierung und -Optimierung durchführen. Es wird empfohlen, jeweils eine Änderung vorzunehmen, die Konfigurationsdatei zu speichern, den Nginx-Server neu zu starten und Leistungstests durchzuführen, um Leistungsverbesserungen festzustellen. Wenn Sie keine Verbesserung feststellen, möchten Sie möglicherweise zum Standard- / Anfangswert zurückkehren.

1. Arbeitsprozesse

Worker-Prozesse beziehen sich auf die Anzahl der Worker, die von Nginx erzeugt werden sollen. Es wird empfohlen, 1 Arbeitsprozess pro CPU-Kern auszuführen. Wenn Sie einen Wert platzieren, der über der Anzahl der CPU-Kerne in Ihrem Computer / VPS liegt, führt dies zu Leerlaufprozessen im System.

Standardmäßig ist der Wert für Worker-Prozesse auf festgelegt Auto.

Führen Sie den folgenden Befehl aus, um die Anzahl der CPU-Kerne in Ihrem System zu ermitteln:

$ grep Prozessor / proc / cpuinfo | wc -l
1

In unserem VPS haben wir 1 Kern, daher wird empfohlen, den Arbeitsprozesswert auf 1 zu setzen

in der Konfigurationsdatei wie unten gezeigt:

worker_processes 1;

Wenn auf Ihrem Nginx-Webserver mehr Datenverkehr aufgebaut wird und mehr Prozesse ausgeführt werden müssen, wird empfohlen, Ihren Computer auf mehr Kerne zu aktualisieren und die Arbeitsprozesse an die neue Anzahl von CPU-Kernen in Ihrem System anzupassen.

2. Arbeiterverbindungen

Worker-Verbindungen sind die Anzahl der Clients, die gleichzeitig von einem Nginx-Webserver bedient werden können. In Kombination mit dem Arbeitsprozess erhalten Sie die maximale Anzahl von Clients, die pro Sekunde wie folgt bedient werden können:

Maximale Anzahl von Clients / Sekunde = Worker-Prozesse * Worker-Verbindungen

Standardmäßig ist der Wert für Worker-Verbindungen auf 768 festgelegt.

Es ist jedoch zu beachten, dass ein Browser in den meisten Fällen mindestens zwei Verbindungen pro Server gleichzeitig öffnet, sodass die Anzahl halbiert werden kann.

Um das volle Potenzial von Nginx auszuschöpfen, sollten die Worker-Verbindungen auf die zulässige maximale Anzahl von Prozessen eingestellt werden, die gleichzeitig vom Core ausgeführt werden können. Dies entspricht der Anzahl der offenen Dateideskriptoren, die mit dem folgenden Befehl abgerufen werden können:

$ ulimit -n
1024

In unserem VPS ist der Kern auf jeweils 1024 Prozesse beschränkt. Daher wird empfohlen, den Wert der Worker-Verbindungen (innerhalb des Ereignisabschnitts) wie folgt auf 1024 festzulegen:

Veranstaltungen {
worker_connections 1024;

}}

Nach unserer Berechnung beträgt die maximale Anzahl von Kunden, die pro Sekunde bedient werden können

1024 Worker-Verbindungen * 1 Worker-Prozess = 1024 Clients pro Sekunde

3. Multi Accept

Multi Accept definiert, wie der Worker-Prozess neue Verbindungen akzeptiert.

Standardmäßig ist der Arbeitsprozess deaktiviert und akzeptiert jeweils eine neue Verbindung.

Wenn es aktiviert ist, akzeptiert der Worker-Prozess alle neuen Verbindungen auf einmal. Der Wert multi_accept (innerhalb des Ereignisabschnitts) sollte wie unten gezeigt deaktiviert sein:

Veranstaltungen {
worker_connections 1024;
multi_accept off;
}}

4. Gzip-Komprimierung

Durch die Komprimierung der Antworten der Clients wird ihre Größe verringert, wodurch weniger Netzwerkbandbreite benötigt wird und die Ladezeit der Seite für langsame Verbindungen verbessert wird. Es ist zu beachten, dass der Komprimierungsprozess selbst Maschinenressourcen verbraucht. Daher sollten Sie die Kostenvorteile der Komprimierung analysieren und bewerten. Andernfalls kann die Komprimierung nachteilig wirken und die Nginx-Leistung verringern. Es wird empfohlen, die Komprimierung wie folgt zu implementieren:

  1. Aktivieren Sie gzip-Inhalte nur für geeignete Inhalte, z. B. CSS, Text, JavaScript-Dateien usw.
  2. Untersuchen Sie die Auswirkungen der Komprimierung, indem Sie die Komprimierung für die verschiedenen Inhaltstypen und -größen aktivieren und deaktivieren
  3. Erhöhen Sie NICHT die Komprimierungsstufe, da dies den CPU-Aufwand ohne eine entsprechende Erhöhung des Durchsatzes kostet.

Das empfohlene Beispiel für eine gzip-Konfiguration lautet wie folgt: (innerhalb http Abschnitt)

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text / einfacher text / css anwendung / json anwendung / javascript text / xml anwendung / xml anwendung / xml + rss text / javascript;

5. Puffer

Puffer spielen eine große Rolle bei der Optimierung der Nginx-Leistung. Die folgenden Variablen müssen für eine optimale Leistung angepasst werden:

client_body_buffer_size – Behandelt die Größe des Client-Puffers, d. h. die POST-Aktionen, z. Formularübermittlungen an den Nginx-Webserver gesendet. Es wird empfohlen, diesen Wert auf 10 KB einzustellen.

client_header_buffer_size – Ähnliche client_body_buffer_size, behandelt jedoch die Größe des Client-Headers. Es wird empfohlen, dies auf 1 KB einzustellen.

client_max_body_size – Maximal zulässige Clientanforderungsgröße. Wenn der Wert überschritten wird, erzeugt nginx einen 413-Fehler oder eine zu große Anforderungsentität.

large_client_header_buffers – Maximale Anzahl und Größe der Puffer für große Client-Header.

Die empfohlenen Einstellungen sind wie folgt (innerhalb http Abschnitt)

client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 4k;

Mit den Werten über dem Nginx funktioniert es optimal, aber für eine weitere Optimierung können Sie die Werte optimieren und die Leistung testen.

6. Zeitüberschreitungen

Timeouts verbessern die Nginx-Leistung erheblich. Die Keepalive-Verbindungen reduzieren den CPU- und Netzwerk-Overhead, der zum Öffnen und Schließen von Verbindungen erforderlich ist. Die folgenden Variablen müssen angepasst werden, um die beste Leistung zu erzielen:
client_header_timeout & client_body_timeout – Zeit, die der Nginx-Server darauf wartet, dass ein Client-Header oder -Körper nach einer Anforderung gesendet wird.

keepalive_timeout – Die Dauer, während der die Keepalive-Verbindung geöffnet bleibt. Danach schließt nginx die Client-Verbindung.

send_timeout – Zeitlimit für das Senden einer Antwort an den Client. Wenn der Client die Antwort des Servers innerhalb dieser Dauer nicht empfängt, beendet nginx die Verbindung.

Die folgenden Werte werden empfohlen: (innerhalb des http-Abschnitts)

client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;

7. Zugriffsprotokoll

Die Protokollierung ist sehr wichtig für die Verwaltung, Fehlerbehebung und Überwachung von Systemen. Das Protokollieren und Speichern großer Datenmengen beansprucht jedoch so viel Systemressourcen, dass mehr CPU / E / A-Zyklen verwendet werden, wodurch die Serverleistung verringert wird. Für die Zugriffsprotokollierung wird jede einzelne Nginx-Anforderung protokolliert, wodurch viele CPU-Ressourcen verbraucht werden, was die Nginx-Leistung verringert.

Hierfür gibt es zwei Lösungen.

  1. Deaktivieren Sie die Zugriffsprotokollierung vollständig
    access_log off;
  2. Wenn eine Zugriffsprotokollierung erforderlich ist, aktivieren Sie die Pufferung des Zugriffsprotokolls. Auf diese Weise kann Nginx eine Reihe von Protokolleinträgen puffern und gleichzeitig zusammen in die Protokolldatei schreiben, anstatt für jeden einzelnen Protokolleintrag einen anderen Schreibvorgang auszuführen.
    access_log /var/log/nginx/access.log Hauptpuffer = 16k

Sie können auch Open Source-Lösungen für die Protokollierung wie ELK Stack und andere verwenden, mit denen alle Protokolle für Ihr System zentralisiert werden.

Fazit

Sobald Sie einen optimierten Nginx-Webserver haben, besteht der nächste Schritt darin, den Server zu überwachen und die Einstellungen mit der Zeit zu ändern, wenn Datenverkehr zum Server aufgebaut wird oder andere Faktoren auftreten. Daher sind die empfohlenen Werte nicht unter allen Umständen die besten, sondern nur während der Entwicklung und bei geringem oder mittlerem Datenverkehr zum Webserver. Sie können die Werte schrittweise erhöhen, während Sie Leistungstests durchführen, um nach Verbesserungen zu suchen.

Wenn Sie keine Verbesserung feststellen, belassen Sie den Standardwert. Insgesamt verbessern die optimierten Werte der verschiedenen Parameter die Nginx-Leistung erheblich.

Andere Überlegungen, die Sie anstellen könnten, um die Leistung Ihres Webservers zu verbessern, insbesondere wenn sich Datenverkehr aufbaut, sind Lastausgleich, automatische Skalierung, hohe Verfügbarkeit, um nur einige zu nennen. Wenn alles andere fehlschlägt, sollten Sie zu einem neuen VPS-Anbieter mit besserer, aktuellerer Hardware und Software wechseln (benötigen Sie Hilfe? Besuchen Sie die Liste der besten VPS-Hosting-Services von HostAdvice).

Schauen Sie sich diese Top 3 VPS-Dienste an:

A2 Hosting

Startpreis:
$ 5,00


Verlässlichkeit
9.3


Preisgestaltung
9.0


Benutzerfreundlich
9.3


Unterstützung
9.3


Eigenschaften
9.3

Bewertungen lesen

Besuchen Sie A2 Hosting

ScalaHosting

Startpreis:
$ 12.00


Verlässlichkeit
9.4


Preisgestaltung
9.5


Benutzerfreundlich
9.5


Unterstützung
9.5


Eigenschaften
9.4

Bewertungen lesen

Besuchen Sie ScalaHosting

Hostinger

Startpreis:
$ 3,95


Verlässlichkeit
9.3


Preisgestaltung
9.3


Benutzerfreundlich
9.4


Unterstützung
9.4


Eigenschaften
9.2

Bewertungen lesen

Besuchen Sie Hostinger

Verwandte Anleitungen

  • So installieren Sie WordPress mit Nginx & Redis
    Neuling
  • So installieren Sie WordPress mit Nginx & Redis auf einem CentOS VPS oder einem dedizierten Server
    mittlere
  • So härten Sie Nginx Web Server auf einem Ubuntu 18.04 VPS oder Dedicated Server
    Experte
  • So installieren Sie den LEMP-Stapel (Linux, Nginx, MySQL, PHP) auf CentOS 7 VPS oder einem dedizierten Server
    mittlere
  • So konfigurieren Sie Nginx und Apache zusammen auf demselben Ubuntu VPS oder Dedicated Server
    mittlere
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me