Apache vs. Nginx Vor- und Nachteile für WordPress

Die Anforderungen an die WordPress-Leistung können sich je nach Projekt unterscheiden, aber eines bleibt auf jeden Fall dasselbe - es muss sein schnell

Eine weitere Anforderung, die selbstverständlich ist, muss es sein wirtschaftlich, Daher können wir keine ressourcenintensiven Lösungen haben. Lösungen müssen mager, gemein und sein zuverlässig, Um das Einkommen auf Ihrer Website vollständig zu maximieren, müssen die Kosten für das Hosting auf ein Minimum reduziert werden.

Wenn Sie mit viel Datenverkehr rechnen, hat die Webserverkonfiguration, für die Sie WordPress bereitstellen, direkte Auswirkungen auf die Leistung Ihrer Website, was sich auf die Ladezeit und die Stabilität auswirkt. 

Bei der Auswahl Ihres Webservers haben Sie mehrere Möglichkeiten. Apache, Nginx, IIS, Caddy und Lighttpd sind beliebte Projekte. Wir werden Apache und Nginx in diesem Handbuch behandeln.

Es wird geschätzt, dass Apache Server und Nginx zusammen 50% des gesamten Internetverkehrs aus dem gesamten Internet zusammen bedienen. 

Wenn Sie ein Neuling auf dem Gebiet sind, sind Sie möglicherweise verwirrt von den beiden scheinbar gleichen Zwecken der Software, um Websites zu bedienen. Ich hoffe, ich werde im Folgenden näher erläutern, wie sich die beiden unterscheiden und wie man die Funktionen beider nutzen kann. 

Apache und Nginx sind sehr etablierte Projekte, und beide haben ihre eigenen Gründe, dies zu erreichen und ein ähnliches Ziel zu erreichen, wenn Sie Ihre WordPress-Site bedienen. Wenn wir jedoch tiefer in ihre Designs schauen, besteht ein großer Unterschied darin, wie die Verbindungen von jedem Server verarbeitet werden. 

Der Unterschied

Ein Hauptunterschied besteht darin, wie Verbindungen von beiden verwaltet werden.

Einfach ausgedrückt, Apache verwendet a gegabeltes Gewinde Lösung oder bleib am Leben, Dadurch bleibt jedem Benutzer eine Verbindung offen.

Auf der anderen Seite verwendet Nginx eine Nicht blockierende Ereignisschleife, welche Pools Verbindungen asynchron über Arbeitsprozesse bilden.

Aufgrund dieser Architektur ist das Ergebnis ein Single-Threaded-Nginx-Prozess, und es werden keine zusätzlichen Prozesse erstellt, um jede neue Verbindung zu verarbeiten. Daher werden CPU und RAM auch in Zeiten hoher Last bei diesem Ansatz nicht blockiert.

Neben der Architektur gibt es auch einige kleine Unterschiede und Nuancen in der Konfiguration, die wir später in diesem Handbuch ausführlicher behandeln werden. 

Lassen Sie uns zunächst die beiden Projekte betrachten und einen klaren Überblick bekommen.

Apache

  • 1995 von Robert McCool, einem Alumnus der University of Illinois, gegründet, der seit 1999 von der Apache Software Foundation kontinuierlich weiterentwickelt wird.
  • Am häufigsten im Internet seit 1996 verwendet (Standardeinstellung für viele Hosts, z. B. cPanel-Benutzer).
  • Verwendet ein weitgehend erweiterbares dynamisches Modulladesystem.
  • Verwendet a .htaccess Datei zum Umschreiben der URL.
  • Verwendet a httpd.conf Datei für die Serverkonfiguration mit einer XML-ähnlichen Syntax.

WordPress funktioniert mit Apache so ziemlich direkt, ein PHP-Modul wie mod_php ist erforderlich, aber es ist nicht viel anderes erforderlich, um es in Gang zu setzen. 

Apache ist sehr flexibel und verfügt über eine Reihe von Modulen. Häufig, mod_rewrite wird verwendet, um das Umschreiben von URLs bereitzustellen, um URLs wie z categories.php? id = 4 zu / categories / 4.

Nginx

  • Das Unternehmen wurde 2002 von Igor Sysoev, einem russischen Software-Ingenieur, als Lösung für das C10k-Problem gestartet. Eine Herausforderung für Webserver, 10.000 gleichzeitige Verbindungen zu verarbeiten. 
  • 2004 veröffentlicht, um das Ziel als asynchrone, nicht blockierende, ereignisgesteuerte Architektur zu erreichen.
  • Leichter Betrieb mit minimaler Hardware bietet hervorragende Leistung bei statischen Inhalten.
  • Sehr reaktionsschnell unter schwerer Last.
  • Verwendet ein nginx.conf Konfigurationsdatei mit einer geschweiften, JS-ähnlichen Syntax.
  • Erweiterbar mit Drittanbieter-Modulen.

Als Nachfolger von Apache hat Nginx den Vorteil, die Fallstricke und Leistungsprobleme der Parallelität zu kennen, die auftreten können. Mit seinem sehr schnellen asynchronen Event-Loop-Design kann es voll ausgenutzt werden.

Bei statischen Inhalten funktioniert das sehr schnell. Bei dynamischen Inhalten, wie zum Beispiel PHP, kann Nginx diese Funktion nicht wie Apache mit einem Modul verarbeiten. Dies ist jedoch kein Hindernis, da dazu FastCGI verwendet wird. Dies funktioniert sehr gut in Verbindung mit PHP-fpm-Verbindungspools und Memcache.

WordPress-Anforderungen

  • PHP 7> 
  • MySQL 5.6 oder Maria DB 10.0>
  • mod_rewrite (wenn Apache verwendet wird)
  • SSL (falls verwendet)

Sowohl Apache als auch Nginx unterstützen PHP-Fpm. Dies ist ein FastCGI-Manager, a forked process mein anager für PHP, mit dem eine sehr schnelle Antwortzeit erreicht werden kann. Er wird als Daemon auf dem Server ausgeführt und erzeugt bei Bedarf Prozesse nativ. 

PHP FPM mit Apache konfigurieren

Ubuntu- und Debian-Benutzer können die erforderlichen Pakete mit aptitude installieren:

sudo apt-get -y installiert libapache2-mod-fastcgi php7.0-fpm php7.0

Aktivieren Sie nun das Modul in Apache:

a2enmod-Aktionen fastcgi-Alias

Dann in der Konfigurationsdatei /etc/apache2/conf-available/php7.0-fpm.conf, Folgendes hinzufügen:

 AddHandler php7-fcgi .php Aktion php7-fcgi / php7-fcgi Alias ​​/ php7-fcgi / usr / lib / cgi-bin / php7-fcgi FastCgiExternalServer / usr / lib / cgi-bin / php7-fcgi -socket / var / run /php/php7.0-fpm.sock -pass-header Berechtigung 

In Ihrem VirtualHost für WordPress (Standardpfad) /etc/apache2/sites-available/000-default.conf), füge folgendes hinzu:

 Erfordert alle Gewähr   SetHandler php7-fcgi .php Aktion php7-fcgi / php7-fcgi virtueller Alias ​​/ php7-fcgi / usr / lib / cgi-bin / php7-fcgi FastCgiExternalServer / usr / lib / cgi-bin / php7-fcgi -socket / var / run / php / php7.0-fpm.sock -pass-header Berechtigung 

Starten Sie jetzt Apache neu und Sie können loslegen

Starten Sie apache2.service neu

Mach ein Datei und suchen Sie in Ihrem Browser. PHP wird jetzt mit FPM geliefert. 

Überprüfen Sie jetzt Ihren WordPress-Blog. Beachten Sie jeden Unterschied?

PHP FPM mit Nginx konfigurieren

Ubuntu- und Debian-Benutzer können das Paket mit den folgenden Elementen installieren:

apt-get -y install php7.0-fpm

Jetzt müssen Sie in Ihrer Konfigurationsdatei (Standard / etc / nginx / sites-available / default) im Serverblock die FastCGI-Konfiguration wie folgt hinzufügen:

Server … location / # versuche und versuche mit der Datei try_files $ uri $ uri / = 404;  # PHP FPM-Konfigurationsverzeichnis ~ \ .php $ include snippets / fastcgi-php.conf; # Verbindung über Socket fastcgi_pass unix: /run/php/php7.0-fpm.sock;  # deny apache .htaccess fordert location ~ /\.ht alle verweigern; …

Hier setzen wir das Snippet von Nginx ein, um die CGI-Parameter einzustellen und fastcgi die Socket-Verbindung zu übergeben. 

Stellen Sie als Nächstes sicher, dass Sie cgi.fix_pathinfo = 0 in php ini wird die Konfiguration durch die Standardeinstellung beschädigt. Bearbeiten /etc/php/7.0/fpm/php.ini und set:

[…]; cgi.fix_pathinfo bietet * echte * PATH_INFO / PATH_TRANSLATED Unterstützung für CGI. PHP's; Das bisherige Verhalten bestand darin, PATH_TRANSLATED auf SCRIPT_FILENAME und nicht auf Grok zu setzen. Was ist PATH_INFO? Weitere Informationen zu PATH_INFO finden Sie in den cgi-Spezifikationen. Einstellung; Dies führt dazu, dass PHP CGI seine Pfade entsprechend der Spezifikation festlegt. Eine Einstellung ; von null bewirkt, dass sich PHP wie zuvor verhält. Der Standardwert ist 1. Sie sollten Ihre Skripts korrigieren. um SCRIPT_FILENAME anstelle von PATH_TRANSLATED zu verwenden. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo = 0 […]

Jetzt können Sie die Datei speichern und PHP FPM erneut laden. Tun Sie dies über:

service php7.0-fpm reload

Zum Schluss können wir das überprüfen  In einem Browser wird bestätigt, dass der Server jetzt PHP FPM mit Nginx verwendet.

Mod_rewrite in Nginx machen

Nginx verwendet kein .htaccess Datei, und für das Umschreiben von URLs ist der Ansatz viel einfacher.

Damit Ihr WordPress-Blog mit Nginx funktioniert, fügen Sie einfach Folgendes hinzu try_files Teil Ihrer Nginx-Konfiguration:

location / index index.php index.html index.htm; try_files $ uri $ uri / /index.php?q=$uri&$args;  

Wenn Sie ein Verzeichnis für Ihren WordPress-Blog verwenden, legen Sie Folgendes fest:

location / wordpress / try_files $ uri $ uri / /index.php?q=$uri&$args; 

Starten Sie Nginx neu und Sie haben das URL-Umschreiben in Kraft.

$ service nginx restart

Optimale Setups

Sie haben viele Möglichkeiten, WordPress durch Zwischenspeicherung auf dem Server über Memcache, Lack und auch auf WordPress-App-Ebene mit Plugins zu optimieren, mit denen Sie problemlos darauf zugreifen können. 

Was Ihnen Nginx bietet, ist jedoch eine großartige Lösung für die Bereitstellung statischer Website-Inhalte mit seinem robusten und schnellen statischen Content-Cache.

Statischer Inhalt-Cache

Nginx ist sehr schnell, wenn es als statischer Inhaltscache verwendet wird, und hier übertrifft es die Verwendung von WordPress und Blogbeiträgen mit vielen Bildern. Sie können CSS, JS und Bilder über einen Nginx-Server bereitstellen, der nur für diese Anforderungen ausgeführt wird. 

Am besten tun Sie dies immer auf einer Domäne ohne Cookies, damit der Inhalt vom Browser wirklich zwischengespeichert wird (als Cookie als nicht zwischenspeicherbar). Verwenden Sie daher eine Unterdomäne wie images.myblog.com oder static.myblog.com wäre ideal.

Ein Standortblock für diese statische Subdomänenkonfiguration würde folgendermaßen aussehen:

 location ~ * ^. + \. (?: css | cur | js | jpe? g | gif | htc | ico | png | html | xml | otf | ttf | eot | woff | svg) $ access_log off; verfällt 30d; tcp_nodelay off; ## Legen Sie den OS-Dateicache fest. open_file_cache max = 3000 inaktiv = 120s; open_file_cache_valid 45s; open_file_cache_min_uses 2; open_file_cache_errors off; 

Verwenden open_file_cache, Wir ermöglichen das Caching für unsere statischen Mediendateien. Wir geben an, wie viele Dateien maximal gespeichert werden sollen und für wie lange open_file_cache max = 3000 inaktiv = 120s;

Wenn Sie das Caching projektweit einrichten möchten, fügen Sie einfach die folgenden vier Zeilen in Ihre nginx.conf-Konfigurationen ein:

open_file_cache max = 10000 inaktiv = 5m; open_file_cache_valid 2m; open_file_cache_min_uses 1; open_file_cache_errors on;

Wichtig: Das open_file_cache_errors speichert die tatsächlichen 404-Fehler, so dass es besser ist, diese Option auszuschalten, wenn Sie einen Load Balancer in Verbindung damit verwenden.

PHP-FPM-Verbindungspools

Es ist möglich, verschiedene Pools für jedes unterschiedliche WordPress zu verwenden, und Sie können Ressourcen für jede Site sehr genau zuweisen - auch wenn Sie unterschiedliche Benutzer und Gruppen für jeden Pool verwenden, wenn dies erforderlich ist. Die Konfiguration ist sehr flexibel. 

Sie können mehrere Konfigurationen einrichten, zum Beispiel:

/etc/php-fpm.d/family-site.conf /etc/php-fpm.d/travel-blog.conf /etc/php-fpm.d/cooking-recipes.conf 

In jedem der folgenden Bereiche können Sie eine Vielzahl von Konfigurationen wie folgt festlegen:

[site] listen = 127.0.0.1:9000 user = user group = websites request_slowlog_timeout = 5s slowlog = /var/log/php-fpm/slowlog-site.log listen.allowed_clients = 127.0.0.1 pm = dynamisch pm.max_children = 5 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = 4 pm.max_requests = 200 listen.backlog = -1 pm.status_status = / status request_terminate_timeout = 120s rlimit_files = 131072 rlimit_output = unbegrenzt catch_workers_output = yes endh HOSTNAME env [TMP] = / tmp env [TMPDIR] = / tmp env [TEMP] = / tmp

Hiermit können Sie die Konfigurationsoptionen von PHP-FPM angeben, z. B. pm.max_children. Außerdem können Sie Umgebungsvariablen angeben und hier die Einstellungen für Benutzername und Gruppe festlegen.

Nginx Load Balancer

Wenn Sie viel Verkehr bekommen, möchten Sie wahrscheinlich einen Load Balancer einrichten, der in Ihrem PHP-Setup verwendet wird.

Konventionell werden wir mehrere Back-End-Upstream-Server starten wollen, auf denen jeweils Spiegel Ihres Blogs ausgeführt werden. Anschließend wird ein weiterer Server mit nginx vor dem Server ausgeführt, der als Load Balancer fungiert und die Last zwischen den Upstreams leitet. 

Dies bedeutet, dass Sie viele Server verwenden können, um Ihren Blog auf einmal zu betreiben, und die Konfiguration dafür ist relativ einfach. 

Eine Beispielkonfiguration würde so aussehen. Zuerst beginnen wir mit einem Upstream-Modul:

Upstream-Backend Server-Backend1.example.com; Server backend2.example.com; Server backend3.example.com; 

Hier hat jedes backend1.example.com eine eigene Nginx-Konfiguration, eine Spiegelung der Site, bevor sie einen Lastverteiler hatte. Nginx wählt den Server aus, der für jede Anfrage verwendet werden soll.

Wenn eines unserer Backends eine schnellere Festplatte hat, wie zum Beispiel SSD, oder sich geografisch näher an der Hauptbenutzerbasis befindet, können Sie die Gewichtung wie folgt einstellen:

Upstream-Backend Server-Backend1.example.com-Gewicht = 1; Server-Backend2.example.com-Gewicht = 2; Server-Backend3.example.com-Gewicht = 4; 

Wenn Sie der Meinung sind, dass ein Server ausfällt oder Bedenken wegen Timeouts besteht, gibt es auch hierfür Konfigurationsoptionen:

Upstream-Backend server-backend1.example.com max_fails = 3 fail_timeout = 15s; Server-Backend2.example.com-Gewicht = 2; Server-Backend3.example.com-Gewicht = 4;

Bei dieser Konfiguration wird der Server nach 3 Fehlern oder einem Timeout von 15 Sekunden nicht mehr vom Load Balancer verwendet. Wenn Sie einen Server manuell als inaktiv markieren möchten, fügen Sie das Schlüsselwort hinzu Nieder, z.B. Server backend3.example.com heruntergefahren;.

Als nächstes müssen wir das über einen Proxy an den Server übergeben Backend Upstream haben wir eben definiert:

 Server Standort / Proxy-Pass http: // Backend; 

Starten Sie nun Ihren Server neu mit Dienst Nginx Neustart, und Sie führen eine ausbalancierte Version Ihrer Site! 

Zu diesem Thema gibt es auch eine Nginx-Anleitung zum Bereitstellen statischer Inhalte und die besten Konfigurationsoptionen. Beachten Sie die Verwendung tcp_nopush und Datei senden für Mp3 zum Beispiel.

Apache zu Nginx migrieren

Neben dem Lesen des Nginx-Handbuchs und dem Durchführen der Änderungen selbst können Sie das Open-Source-Tool apache2nginx verwenden, um Ihre Konfiguration von Apache nach Nginx zu übersetzen.

Befolgen Sie die Installationsschritte in der apache2nginx README. Nach der Installation haben Sie die Möglichkeit, Konfigurationsdateien zu migrieren, indem Sie Folgendes ausführen:

$ apache2nginx -f /etc/httpd/conf/httpd.conf

Sie können nun die Konfiguration überprüfen und in Ihrer Nginx-Installation testen. Die Übersetzung war möglicherweise nicht perfekt, aber Sie erhalten eine Basis, auf der Sie beginnen können.

Fazit

In Bezug auf Geschwindigkeit und Leistung ist Nginx die offensichtliche Wahl gegenüber Apache. Dies bedeutet jedoch nicht, dass Apache keinen Verkehr verarbeiten kann. Wenn Sie vorhaben, in Kürze auf die Startseite von Reddit zu wechseln, sollten Sie wahrscheinlich eine umfangreichere Lösung mit Nginx und PHP-FPM suchen.

Die Migration von WordPress zu Nginx ist nicht sehr schwierig. Die Konfiguration in Nginx ist im Vergleich zu Apache sehr einfach und leicht zugänglich. 

Obwohl es nicht die gleichen Module wie Apache gibt und dies möglicherweise zunächst nicht vertraut ist, können Sie in den meisten Fällen einen Ersatz finden. Wenn nicht, können Sie als Fallback-Lösung den alten Server jederzeit über Ihren nginx für diesen Zweck zur Verfügung stellen.

Es gibt viele Möglichkeiten, beide Server zu konfigurieren. Daher kann fast immer eine gute Lösung für die jeweiligen Anforderungen gefunden werden. Im Moment scheint Apache aufgrund des mitgelieferten EasyApache-Setup-Tools die Standardeinstellung für die weit verbreitete Hosting-Software cPanel zu sein. 

In Zukunft werden möglicherweise mehr Hosts Nginx-cPanel-Tools wie Engintron einsetzen, die Nginx auch für cPanel bereitstellen. 

Wenn Sie zu einem Nginx-betriebenen WordPress wechseln möchten, müssen Sie zunächst ein Linux-VPN bei DigitalOcean, AWS oder einem anderen Hosting-Provider einrichten.