nginx mit HHVM und PHP-FPM im Parallelbetrieb

Achtung! Dieser Artikel ist älter als ein Jahr. Der Inhalt ist möglicherweise nicht mehr aktuell!

 

Parallel zum Upgrade von Debian 7 auf Debian 8 habe ich meinen Apache Webserver durch nginx ausgetauscht. Der Grund: Ich hätte alle meine Konfigurationsdateien komplett neu entwickeln müssen (von Apache 2.2 auf Apache 2.4). Deshalb wollte ich den neuen Super-Webserver nginx ausprobieren.

Da ich schon Arbeiten an meiner Web-Struktur angefangen habe, wollte ich komplett aufräumen und meine PHP Umgebung sauber an nginx anbinden. Vorher hatte ich eine SuExec Umgebung mit FCGI-Wrapper-Script im Einsatz.

Letztens habe ich etwas über die Facebook Hip Hop Virtual Machine gelesen – ein PHP Ersatz mit besserer Performance. Da ich sowieso am neu aufsetzen der kompletten Logik war, wollte ich dieses Wunderding mal ausprobieren. Schnell stellte sich aber heraus, dass nicht alles mit der HHVM abbildbar ist, zum Beispiel die GnuPG Anbindung, die ich für meinen Proxychecker brauche. Also brauche ich ebenfalls eine native PHP Lösung. Und sowas strukturiert man am besten mit PHP-FPM.

Schön ist, dass beide Backends ein FastCGI Interface bieten und unabhängig voneinander installiert und betrieben werden können. Jeder nginx Server/(vHost) soll dann selbst entscheiden können, welches PHP Backend verwendet werden soll.

Das ganze soll so aussehen:

Optional: Deinstallation apache2

Nach dem Upgrade von Debian habe ich den Apache Webserver deinstalliert und den Konfigurationsordner verschoben, damit ein Script (das später läuft) nicht irritiert wird:

Installation und Konfiguration nginx

Installation des Webservers

nginx ist bei Debian 8.1 bereits in den Standardrepositories enthalten und kann somit via Paketmanager installiert werden:

Damit ist die Basis schon mal gelegt.

Optional: Benutzer wechseln

Der Webserver läuft standardmäßig unter dem User www-data. Aufgrund meiner Altlast habe ich aber alles unter dem Unix Benutzer veloc1ty laufen lassen. Damit nginx mit dem richtigen Benutzer arbeitet, habe ich in der Datei /etc/nginx/nginx.conf eine Änderung vorgenommen:

wurde zu

Danach muss nginx neu gestartet werden.

Installation HHVM

Etwas komplizierter ist die Installation vom HHVM.

Hinzufügen der Repositories

Die HHVM binaries befinden sich nicht in den Standardrepositories. Deshalb muss man eins hinzufügen:

Installation

Nun kann HHVM via Paketmanager hinzugefügt werden:

Danach muss man noch die entsprechende FastCGI Konfigurationsdatei für nginx erstellen. Dafür biete HHVM ein Script:

Danach sollte sich im Ordner /etc/nginx eine Datei mit dem Namen hhvm.conf befinden.

Optional: Benutzer wechseln

HHVM läuft ebenfalls mit dem Benutzer www-data. Aus den selben Gründen wie bei nginx wechsle ich den Benutzer. In der Datei /etc/default/hhvm ändert man

zu

ab. Danach muss man noch im Filesystem Rechte ändern:

Sobald man hhvm neu startet ist der zweite Teil auch schon geschafft.

Installation PHP-FPM

Installation

PHP-FPM ist in den Standardrepositories vorhanden und kann einfach via Paketmanager installiert werden:

Optional: Benutzer wechseln

Auch PHP-FPM läuft standardmäßig unter www-data. Deshalb muss ich auch hier den Standardbenutzer wechseln. Den Benutzer kann man in der Datei /etc/php5/fpm/pool.d/www.conf ändern:

Danach PHP-FPM neu starten.

Konfiguration des FastCGI Interfaces

Anders als bei HHVM lauscht PHP-FPM standardmäßig auf eine Unix-Socket. Das würde aber nicht auf das oben beschriebene Szenario passen. Damit PHP-FPM auf 127.0.0.1:9001 lauscht ändert man in der Datei /etc/php5/fpm/pool.d/www.conf folgende Optionen ab:

Danach PHP-FPM neu starten.

nginx FastCGI Konfiguration

Damit nginx nun das FastCGI Interface von PHP-FPM ansprechen kann, braucht man noch die entsprechende Konfigurationsdatei. Dabei habe ich mich an der Datei erstellt, die HHVM erstellt hat mit angepassten Parametern.

Meine Datei unter /etc/nginx/php-fpm.conf sieht wie folgt aus:

Geändert wurde der Port (von 9000 auf 90001) und dass keine Hack-Dateien (.hh) an PHP-FPM geschickt werden.

Erstellt man nun einen Server kann einfach via „include hhvm.conf;“ HHVM als PHP Backend bestimmt werden, oder mit „include php-fpm.conf;“ PHP-FPM. Beispiel:


Du hast einen Kommentar, einen Wunsch oder eine Verbesserung? Schreib mir doch eine E-Mail! Die Infos dazu stehen hier.

🖇️ = Link zu anderer Webseite
🔐 = Webseite nutzt HTTPS (verschlüsselter Transportweg)
Zurück