WordPress-Installation von Apache 2 auf NGINX umstellen – Teil 1: Installation

NGINX Startseite

NGINX Startseite

Meine beiden WordPress-Websites (diese hier und Martins Website) liefen seit einiger Zeit auf einem VServer (gehostet bei Strato) unter einem Apache 2-Web Server. Seit einiger Zeit gibt es aber einen ernsthaften Konkurrenten für Apache: den ebenfalls freien Web Server NGINX (steht für “engine x”). Glaubt man den diversen Statistiken ist NGINX mittlerweile der zweitpopulärste Web Server und hat Microsofts Internet Information Server damit überholt. So verwenden auch einige sehr große Websites wie z.B. WordPress, Hulu, Facebook NGINX und nicht Apache. Die Vorteile von NGINX gegenüber Apache sind der geringere Speicherverbrauch, eine bessere Performance und die einfachere Konfiguration. Nachdem meine Websites jetzt ein paar Wochen unter NGINX laufen, kann ich das alles nur bestätigen. Insbesondere die Konfiguration des NGINX-Server gefällt mir deutlich besser als bei Apache. Anstelle der verstreuten Konfigurationsdateien (insbesondere der diversen .htaccess-Dateien) befindet sich bei NGINX alles an einem Ort.

In diesem und den folgenden Artikeln werde ich einmal beschreiben, wie ich bei der Umstellung der beiden Websites vorgegangen bin. Dabei gehe ich auch auf die Besonderheiten bei WordPress Multisites ein und beschreibe meine Lösung für eine mehrsprachige Website. Alle Anleitungen beziehen sich dabei Ubuntu 10.04. Da ich hier die Umstellung einer bestehenden WordPress-Installation beschreibe, gehe ich davon aus, dass PHP, MySQL und natürlich WordPress bereits installiert sind.

Wer eine Komplettanleitung für die Einrichtung von WordPress unter NGINX sucht, sollte einmal auf Sergej Müllers Website. Er hat dort in einer Artikelreihe sehr detailliert die Installation einer frischen Umgebung beschrieben.

Bevor es an die Installation von NGINX geht, noch ein Tipp von mir: Ich kann nur empfehlen, die Umstellung zunächst in einer lokalen Testumgebung auszuprobieren. Ich habe mir dazu eine virtuelle Maschine mit einer identischen Umgebung wie auf dem produktiven Server eingerichtet (inkl. der WordPress-Datenbanken).

Damit ich die Websites in der Testumgebung auch unter ihren Domainnamen (für Multisite zwingend nötig) aufrufen konnte, habe ich die Datei /etc/hosts modifiziert und folgende Zeile eingefügt (“example.com” ist natürlich nur ein Beispiel und ist durch den korrekten Domainnamen zu ersetzen): 127.0.0.1 example.com www.example.com.

Installation von NGINX und PHP-FPM

Anders als beim Apache Web Server enthält NGINX keine PHP-Anbindung. Man benötigt also eine separate PHP CGI-Implementierung, die das Starten und Verwalten der PHP-Instanzen übernimmt. Ich habe mich für meinen Server für die Verwendung von PHM-FPM entschieden, das zusätzlich zu NGINX installiert werden muss. Für die Installation von NGINX und PHP-FPM gibt es mehrere Möglichkeiten:

  1. Installation der Quellcodes und eigener Compile der Sourcen. Für Linux-Experten ist dies vermutlich die bevorzugte Methode. Mir war es aber zu aufwändig. Wer es dennoch auf diese Art machen möchte, findet die benötigten Informationen im NGINX-Wiki und der PHP-FPM Website.
  2. Installation über den Package Manager aus den Standard-Repositories. Die Ubuntu-Repositories enthalten i.d.R. nur ältere Versionen von NGINX. PHP-FPM ist in den Repositiries von Ubuntu 10.04 noch nicht enthalten und somit kam für mich nur die dritte, folgende Variante in Frage.
  3. Installation aus alternativen Repositories.

Auf Launchpad.net gibt es zwei alternative Repositories für NGINX und PHP5, das auch PHP-FPM enthält. Beide Repositories werden regelmässig gepflegt und man erhält so auch immer die aktuellen stabilen Versionen. Für die Installation benutzt man am einfachsten die Linux-Shell und führt die folgenden Befehle aus:

sudo add-apt-repository ppa:nginx/stable
sudo app-apt-repository ppa:fabianarias/php5
sudo apt-get update
sudo apt-get install nginx php5-fpm

Der NGINX-Server kann jetzt gestartet werden mit sudo service nginx start. Läuft zu diesem Zeitpunkt noch ein Apache-Server, so wird dieser Versuch voraussichtlich fehlschlagen, da der Apache-Server normalerweise für den Port 80 konfiguriert ist und nicht zwei Server gleichzeitig einen Port nutzen können. Jetzt kann entweder der Apache-Server gestoppt werden (mittels sudo service apache2 stop) oder aber für den NGINX-Server wird ein anderer Port konfiguriert. Für die zweite Option muss die Datei /etc/nginx/sites-available/default editiert werden. Dort ist standardmäßig die Port-Zuweisung auskommentiert (durch durch vorangestelltes #) und so wird Port 80 verwendet. Dies kann geändert werden, in dem die Zeile

# listen 80;

ersetzt wird durch:

listen 85;

Anschließend kann der NGINX-Server gestartet werden:

sudo service nginx start

Es sollte jetzt keine Meldung mehr erscheinen. Falls doch findet man weitere Informationen zur Fehlerursache in der Datei /var/log/nginx/error.log. Um zu überprüfen, ob der wirklich korrekt läuft läuft, öffnet man einfach einen Browser mit der Adresse http://127.0.0.1:85. Wenn der NGINX-Server auf Port 80 läuft, entfällt die Angabe von Port 85 natürlich. Es sollte im Browser dann eine Seite wie im Screenshot zu Anfang dieser Artikels erscheinen. Die weiteren Artikel dieser Reihe:

comments powered by Disqus