Kommen wir zur Umsetzung:
1. Apache 2.2. mit FastCGI Supprt installieren
2. PHP5-CGI installieren
3. Die FastCGI + suEXEC Module aktivieren
4. Anpassungen des Dateisystems
5. Anpassungen der Konfigurationsdateien
6. Testen
7. Mögliche Fehler
1. Apache 2.2 mit FastCGI Support installieren
Wir melden uns als root an, und führen folgendes Kommando aus um den Apache 2.2 mit mpm-worker zu installieren:
aptitude install apache2-common apache2-mpm-worker
2. PHP5-CGI installieren
Immer noch als root angemeldet, installieren wir die CGI Version von PHP5. Es muss unbedingt die Version mit CGI Unterstützung installiert werden!
aptitude install php5-cgi
Einige weitere Packete (die PHP5 Core Pakete) werden natürlich mit installiert! Später oder sofort können natürlich weitere PHP Pakete dazu installiert werden (zB php5-mysql) – alle verfügbaren Packete können mittels
aptitude search php5
gesucht werden.
Das ausführbare PHP Binary finden Sie standardmäßig unter /usr/lib/cgi-bin/php5. Ist es dort nicht, suchen Sie einfach mittels
find / -name ‚php*’
nach allen Dateien die mit php beginnen.
Ob es sich um die richtige Datei handelt, kann man herausfinden, indem man in das jeweilige Verzeichnis wechselt, und
./php –v
eingibt.
Hier sollte die PHP Version sowie in Klammern angegeben werden, das es sich um die cgi-fcgi Version handelt (PHP 5.2.0-8+etch1 (cgi-fcgi) bei mir)
3. FastCGI + suEXEC aktivieren
2 einfache Kommandos:
a2enmod fcgid
a2enmod suexec
Und schon sind die beiden Module aktiviert.
Ist mod_fcgid nicht installiert kann man das mittels
aptitude install libapache2-mod-fcgid
nachinstallieren. suEXEC ist (meiner Erfahrung nach) immer installiert!
4. Anpassung des Dateisystems
Als Wurzelverzeichnis des Webservers ist standardmäßig /var/www gewählt. Ich habe dieses Verzeichnis bebehalten, troptzdem müssen wir nun noch einige Anpassungen vornehmen:
4.1 Anlegen eines Users:
Da die Scripte nicht mehr unter dem Apache Benutzer ausgeführt werden sollen, sondern mit dem in der Konfiguration (später) angegebenen Benutzer, müssen wir diesen natürlich auch anlegen.
adduser web
(der Benutzername ist unwichtig, jedoch muss darauf geachtet werden, das in der Konfiguration der gleiche verwendet wird!)
4.2 Anlegen der jeweiligen Verzeichnisse
In /var/www legen wir nun die folgenden Verzeichnisse an und schreiben Sie dem neu angelegtem User zu:
cd /var/www
mkdir conf
mkdir htdocs
chown web.web conf
chown web.web htdocs
chmod 750 conf
chmod 750 htdocs
5. Anpassung der Konfigurationsdateien
Anschließend wechseln wir in das Verzeichnis conf und legen eine PHP Starterdatei mit folgendem Onhalt an und speichern diese als php5-fcgid-htdocs:
#!bin/sh
PHPRC=“pfad/zur/php.ini/“
export PHPRC
exec /pfad/zur/php/datei/php
Beachten Sie, das bei PHPRC (dem Pfad zur bei diesem VirtualHost verwendeten php.ini) die php.ini nicht angegeben werden darf, sondern das nur der Pfad dorthin angegeben werden soll.
Nach exec muss der Pfad (inklusive der php Datei) zur installierten ausführbaren CGI-PHP Datei sein.
Diese Datei muss nun auch dem User web zugeschrieben werden, und es sollte sicherheitshalber das Immutable Bit gesetzt werden, um Sie vollkommen vom System zu isolieren.
chown web.web php5-fcigd-htdocs
Chattr –V +i php5-fcgid-htdocs
5.2 /etc/apache2/mods-available/fcgid.conf
Wollen wir PHP über FastCGI nur für die Endung .php verwenden, sp fügen wir die folgende Zeile hinzu:
AddHandler fcgid-script .php
Weitere Dateiendungen können auf die selbe Weise hinzugefügt werden!
5.3 /etc/apache2/sites-available/… (default)
Anschließend müssen die Seiten angepasst werden (Standard ist erstmal die default Seite).
Innerhalb des jeweiligen virtualhosts muss sowohl der DocumentRoot sowie die SuexecUserGroup angegeben werden:
DocumentRoot /var/www/htdocs
SuexecUserGroup web web
Der DocumentRoot ist das oberste Verzeichnis. In seinen Unterverzeichnissen werden alle Webdateien abgelegt (bitte beachten: wird ein anderer Pfad verwendet, muss auch suexec angepasst werden!).
Nach SuexecUserGroup muss der vorhin von uns angelegt Benutzer stehen. Diese Anweisung gibt an, unter welchem User die Scripte dieses VirtualHosts ausgeführt werden.
Nachfolgend müssen wir die Einstellungen für die Verzeichnisse vornehmen:
So muss der FastCGIWrapper für eine oder mehrere Dateiendungen angegeben werden. In unserem Fall ist der Wrapper (den wir in 5.1 angelegt haben) /var/www/conf/php5-fcgid-htdocs und die Dateiendung die von diesem Wrapper ausgeführt werden soll ist .php (wie in 5.2 festgelegt).
Außerdem muss bei Options ein +ExecCGI hinzugefügt werden.
Options FollowSymLinks
AllowOverride None
Order deny,allow
deny from all
FCGIWrapper /var/www/conf/php5-fastcgid-htdocs .php
Options Indexes FollowSymLinks MultiViews +ExecCGI
AllowOverride None
Order allow,deny
allow from all
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
Fügt man diese beiden Dateiabschnitte zusammen, erhält man einge komplette Beispiel Seitenkonfiguration.
5.4 phpinfo.php anlegen
Als letztes legen wir in /var/www/htdocs eine phpinfp.php an, um eine Testseite zu erhalten:
echo „“ >> phpinfo.php
6. Testen
Nun starten wir den Apache Webserver
/etc/init.d/apache2 start
Funktioniert das phne Probleme, rufen wir den Server im Browser auf: http://ServerIP/phpinfo.php
Bekommen wir die PHP Infoseite angezeigt, hat alles ohne Probleme geklappt.
Wenn nicht ist von einem einfachen Tippfehler bis zu einem schwerwiegenderem Problem leider alles drin.
Hier geben sicher die Logdateien etwas mehr Aufschluss:
cat /var/log/apache2/error.log
Cat /var/log/apache2/suexec.log
7. Mögliche Fehler
7.1 Die Datei wird zum Download angeboten.
Der Weg vom Webserver bis zum PHP Binary ist in irgendeiner Weise versperrt.
Prüfen Sie die FastCGI (/etc/apache2/mods-available/fcgid.conf) , sowie die Seitenkonfiguration (/etc/apache2/sites-available/default[oder eine andere Seite]).
7.2 Internals Server Error
Wahrscheinlich stimmen die Rechte des Wrappers oder des Verzeichnisses in dem der Wrapper liegt nicht. Prüfen Sie die suEXEC Logdatei (/var/log/apache2/suexec.log).