Heute möchte ich einen Workaround präsentieren, um PHP-FPM mit Apache 2.4 unter Ubuntu 14.04 LTS via TCP-Socket zu konfigurieren.
Speziell geht es darum, dass man PHP-FPM nicht via Unix-Socket mit Apache 2.4 ansprechen kann.
Ein kleiner aber feiner Fehler in Apache vor Version 2.4.9 ist dafür verantwortlich.
Leider ist die aktuelle Version von Apache im offiziellen Ubuntu-Repository 2.4.7.
Da ich immer möglichst wenig manuelle Änderungen am Hauptsystem vorziehe, hier mein Lösungsweg.
PHP-FPM pool konfigurieren
Ich gehe davon aus, dass hier die Pakete apache2 und php-fpm bereits installiert habt.
Der Standard-Pfad zur PHP-FPM Konfiguration lautet /etc/php5/fpm
.
Da die Standard-Konfiguration bereits für einen Unix-Socket hinterlegt ist müssen wir dies ändern. Allerdings habe ich bereits einige nginx Instanzen auf meinem Server konfiguriert, welcher PHP-FPM via Unix-Socket anspricht. Aus diesem Grund konfiguriere ich einfach eine zweite PHP-FPM Instanz.
sudo cp pool.d/www.conf pool.d/www-apache.conf
Die verschiedenen PHP-FPM Instanzen werden über so genannte pool Konfigurationen gesteuert.
Nun könnt Ihr die neu kopierte Datei mit VI bearbeiten und folgende Zeilen bearbeiten.
; Start a new pool named 'www'.
; the variable $pool can we used in any directive and will be replaced by the
; pool name ('www' here)
[www-apache]
Der Standard pool nennt sich schlicht www
- diesen könnt Ihr einfach in Zeile vier zu www-apache
ändern.
Dies dient nur um den originalen Prozess mit seinen Konfigurationen nicht zu überschreiben.
Die eigentliche Änderung erfolgt in Zeile 33.
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses on a
; specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
Wie in der Syntax beschrieben ändern wir den Wert für listen
zu einem TCP-Socket - in meinem Fall 127.0.0.1:9000
(localhost)
Die Änderungen werden nach einem Neustart des Dienstes aktiv.
sudo service php5-fpm restart
Apache vHost
Nun können wir innerhalb einer Apache vHost Konfiguration PHP-Dateien via PHP-FPM interpretieren lassen.
Ihr müsst unbedingt das Modul proxy_fcgi
aktivieren - sudo a2enmod proxy_fcgi
Hier ein Beispiel wie ich meinen alten Wordpress Blog aus nostalgischen Gründen in meiner virtuellen Maschine abrufen kann.
<VirtualHost *:7071>
ServerName localhost
DocumentRoot /media/sf_workspaces/wordpress/sunlix.de
DirectoryIndex index.php
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/media/sf_workspaces/wordpress/sunlix.de/
<Directory /media/sf_workspaces/wordpress/sunlix.de>
Options FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/sunlix-wordpress-2012.error.log
CustomLog ${APACHE_LOG_DIR}/sunlix-wordpress-2012.access.log combined
</VirtualHost>
Es ist im Grunde nicht viel was getan werden muss - alles weil es im Ubuntu-Repository keine aktuellere Apache-Version für 14.04 gibt.
Ich hoffe es hilft euch ein wenig weiter.
Viel Erfolg.