Da man wiederholt Beiträge über NGINX als Webserver für Shopware liest, habe ich mir gedacht, dass eine Gegenüberstellung von Apache2 und NGINX mit Shopware doch ganz interessant wäre…
Setup
Shopware
Version 5.2.24
6 Subshops
ca. 50.000 Artikel
15 interne Plugins
10 externe Plugins
Der getestete Subshop hat ca. 500 Kategorien und 6.000 Produkte. Vor dem Test wurden alle Caches geleert und die Webserver neu gestartet. Der HTTP Cache wurde deaktiviert und initial jeweils ein Produkt, Kategorie und Startseite aufgerufen.
Für den Test wurde jeweils eine bestimmte Kategorie aufgerufen (mit mehrfachen Threads/Usern)
Server / Testumgebung
Ubuntu 16.04
Intel(R) Core(TM) i7-4790
16 GB RAM
256GB Intel SSD
Webserver
nginx version: nginx/1.10.1 (Ubuntu)
Server version: Apache/2.4.18 (Ubuntu)
PHP
Version 7.0.20
NGINX: FastCGI
Apache: mod_php
Request Handler
Um die Aufrufe mit untersch. Anzahl an Threads abzusenden, habe ich JMeter genutzt. In unserem Fall mit:
200 Threads
20 Sekunden
Mach durchschnittlich 600rpm, was schon ganz ordentlich ist.
Erster Test
NGINX
Der NGINX hat eine durchschnittliche Latency von 16618ms und eine Fehlerquote von 0. Das heißt alle Requests wurden erfolgreich verarbeitet, gebraucht hat er dafür 52 Sekunden.
phpinfo()
CPU Last
Apache (mod_php)
Der Apache Webserver mit mod_php hatte hier etwas zu kämpfen, nicht nur wurde die CPU extrem beansprucht, sonder warfen von 200 Requests auch 78 einen 500 Error. Abzüglich dieser Errors ergab sich eine durchschnittliche Antwortzeit von 12898ms.
phpinfo()
CPU Last
Apache (FPM)
Der Apache mit mit FastCGI hat wie erwartet mittelmäßig abgeschnitten – zwar hatte er knapp 60% weniger 500 Errors als der Apache mit mod_php – allerdings sind 26 500er immer noch etwas zu viel. Mit eine Latency von 17336ms im Schnitt brauch er etwas länger als der NGINX.
phpinfo()
CPU Last
Fazit
Der NGINX scheint mir, gerade bei vielen Aufrufen, klar die Nase vorn zu haben. Besonders nach dem Cache leeren oder noch nicht aufgewärmten Caches erledigt er hier seine Arbeit wesentlich effizienter.
Wer einen kleinen Shop mit wenig hundert Requests pro Tag hat, kann weiterhin auf den guten alten Apache mit mod_php setzen, diesen bieten die meisten Hoster Standardmäßig an und er ist in den meisten Fällen etwas leichter zu handhaben (.htaccess etc.).
Sobald es allerdings in Richtung von +50.000 Seitenaufrufen pro Tag geht, empfehle ich klar den NGINX oder wenigstens den Apache mit FPM. Im obigen Test hat der NGINX 200 Req. in 20 Sekunden ohne Probleme abgearbeitet – das sind umgerechnet 864.000 Requests pro Tag. Das ist schon eine ordentliche Menge und reicht für die meisten Shopware Setups aus.
Hi Micha,
ich bin von Apache2 auf Nginx umgestiegen und bereue den Umstieg absolut nicht. Die Ladezeit meiner einzelnen Seiten hat sich deutlich verbessert. Auch die pingdoom tools bestätigten mir das. Ich hatte mit dem Apache2 eine Ladezeit von 500ms, dass ist nicht schlecht. Aber mit Nginx waren es sofort nach der Installation 350ms und jetzt mit Optimierungen, sind es nur noch ca 200ms. Ein spitzen Wert. Ich glaube ein großer Vorteil von Nginx gegenüber Apache2 ist, dass Nginx kein htaccess nutzt.
Grüße
Dennis