In diesem Beitrag möchte ich aufzeigen, wie man nginx optimieren kann. Wie nginx installiert wird, erfährst du in Nginx auf Deinem Raspberry Pi installieren & einrichten.
Worker anpassen
Die erste Anlaufstelle bei der Performance Anpassung werden häufig die Worker-Prozesse der /etc/nginx/nginx.conf sein, da auch nginx die Multicore-Techniken unterstützt. Die Anzahl der zu benutzenden CPUs muss nginx angegeben werden. Die CPU-Anzahl kann so ausgelesen werden:
# cat /proc/cpuinfo | grep processor
Beim Raspberry Pi wird es wohl so aussehen:
processor : 0 model name : ARMv6-compatible processor rev 7 (v6l)
Auf anderen Systemen beispielsweise so:
processor : 0 processor : 1 processor : 2 processor : 3
Im ersten Beispiel, beim Raspberry Pi, handelt es sich um ein Singlecore (ein Prozessor) System, beim Zweiten um eines mit 4 Cores (Quadcore). Entsprechend der Anzahl an Cores sind die Worker-Prozesse zu bestimmen.
# nano /etc/nginx/nginx.conf
user www-data; worker_processes 1; # 1 bei Singlecore; 2 bei Dualcore, ... pid /var/run/nginx.pid;
Nun gibt es noch einen Worker Wert in der nginx.conf, die worker_connections. Diese geben effektiv an, wieviel Verbindungen ein Worker-Prozess bedient. Aktuelle Browser bauen allein 2 bis 8 Verbindungen zu einem Webserver auf. Im privaten Umfeld kann der Wert bei 256 (Raspberry Standard) belassen werden, Websites mit viel Traffic können 1024 oder höher setzen.
# nano /etc/nginx/nginx.conf
events { worker_connections 256; }
Tipp: Mit multi_accept wird nginx angewiesen, soviele Verbindungen wie möglich für Anfragen bereitzustellen.
events { worker_connections 256; multi_accept on; }
Zum Schluss nginx neuladen, damit die Änderungen wirksam werden:
/etc/init.d/nginx reload
GZIP aktivieren
Besonders wichtig für Seiten im Internet, wegen ‚beschränkter‘ Bandbreite und hoher Rechenleistung, ist die GZIP-Komprimierung von nginx. Das hat also effektiv zur Folge, das wenige Bytes durch die Leitungen geschickt werden müssen, zu Laste der Rechenpower. Besonders bei großen Systemen wie WordPress macht sich die Komprimierung bemerkbar. Dazu muss wieder die /etc/nginx/nginx.conf angepasst werden (auskommentieren und ggf. anpassen)
# nano /etc/nginx/nginx.conf
gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
Zum Schluss, wie immer, nginx neuladen:
/etc/init.d/nginx reload
Nginx & Cache
HTTP-Header, mit der Information Daten zu cachen, können die Ladezeiten, (bei mehrmaligem Aufruf) sowie den Datentraffic reduzieren. Ein Beispiel im location Kontext für angegebene Dateitypen.
location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)$ { access_log off; # deaktiviert access_log für diese Dateitypen log_not_found off; # deaktiviert Meldungen im error_log expires 360d; }
Damit Zum Schluss, wie immer, nginx neuladen:
/etc/init.d/nginx reload
Natürlich gibt es noch viele andere Möglichkeiten die Performance von nginx zu optimieren. Das kommt jedoch auch oft auf die Situation, den Anwendungszweck und das Ziel an. Außerdem können nginx nahe Systeme wie PHP weitere Leistungssteigerungen von Webservern erzielen. Dazu später mehr an anderer Stelle.
Hi Paul,
danke für die super Tipps. Den HTTP Header, habe ich gerade ebend noch bei mir hinzugefügt. Ich hoffe es bringt was.
Grüße aus Essen