Heute wollen wir mal PHP4 und PHP5 zusammen als CGI im Apache laufen lassen.
1. Den Portsbaum aktualisieren
Bevor wir beginnen, aktualisieren wir den Portsbaum.
cvsup < Dein PortsSupfile >
# cvsup /usr/ports/ports-supfile
Eine detailierte Anleitung zum aktualisieren des Portsbaums findet Ihr hier.
2. Den Apache Webserver aus den Ports installieren
# cd /usr/ports/www/apache21/
# make WITH_STATIC_MODULES=â€rewrite cgid suexec ssl†install clean
Nun wird der Apache mit den Modulen “Rewrite”, “CGID”, “SUEXEC” und “SSL” installiert.
Nach der Installation des Apaches könnt Ihr in der httpd.conf die Grundeinstellungen festlegen
# edit /usr/local/etc/httpd.conf
3. PHP4 und PHP5 installieren
Jetzt downloaded die aktuellsten Versionen von PHP4 und PHP5 von www.php.net.
Entpackt diese in ein Verzeichnis eurer Wahl (hier /home/stonie/inst/php4/ und /home/stonie/inst/php5/).
Und jetzt wird kompeliert:
# cd /home/stonie/inst/php4
# ./configure –prefix=/usr/local/php4 –with-config-file-path=/usr/local/etc/php4 –enable-force-cgi-redirect
–enable-safe-mode
# make install clean
So, PHP4 wird nun als CGI und mit eingeschalteten Safemode in das Verzeichnis /usr/local/php4 installiert.
So, dasselbe macht Ihr mit PHP5, aber darauf achten das die Pfade angepasst werden.
# cd /home/stonie/inst/php5
# ./configure –prefix=/usr/local/php5 –with-config-file-path=/usr/local/etc/php5 –enable-force-cgi-redirect
–enable-safe-mode
# make install clean
5. PHP4 und PHP5 vorbereiten und schützen
Dieser Punkt muss nicht zwangsläufig ausgeführt werden, hat mir aber bei der Übersicht geholfen.
Kopiert die Interpreter von PHP4 und PHP5 in ein CGI-Verzeichnis über dem DocumentRoot eures Webservers.
# cp /usr/local/php4/bin/php /usr/home/_CGI/php4
# cp /usr/local/php5/bin/php /usr/home/_CGI/php5
# chmod -R 500 /usr/home/_CGI/
# chown -R www:www /usr/home/_CGI
Da wir nicht wollen das irgendein unbefugter an unseren PHP-Interpreter rumfiingert, setzen wir die Dateirechte auf 0500 (Lesen und Ausführen als Eigentümer) und legen als Verzeichnis- und Dateieigentümer den Benutzer des Apache Webserver fest.
6. Apache Webserver konfigurieren
# edit /usr/local/etc/apache21/httpd.conf
In der httpd.conf müssen nun noch ein paar kleine Einstellungen gemacht werden, damit der Apache weiß, wie er mit bestimmten Dateien umzugehen hat.
Im Abschnitt tragt Ihr einen Alias ein, der das Physikalische CGI-Verzeichnis in das DocumentRoot eures Server routet.
< IfModule alias_module>
[..]
ScriptAlias /cgi/ “/usr/home/_CGI/”
< /IfModule>
Theoretisch könntet Ihr nun über euren Browser die URL http://www.beispiel.com/cgi/php4 aufrufen, und damit den
PHP-Interpreter starten, aber… so einfach wird es dann doch nicht, denn, wir haben PHP ja mit der Option –force-cgi-redirect kompeliert und das verhindert den direkten Aufruf von PHP durch eine URL.
Ihr könnt es ja mal probieren, Ihr sollten dann folgende Meldung erhalten:
Security Alert! The PHP CGI cannot be accessed directly. This PHP CGI binary was compiled with force-cgi-redirect enabled. This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive.
For more information as to why this behaviour exists, see the manual page for CGI security.
For more information about changing this behaviour or re-enabling this webserver, consult the installation file that came with this distribution, or visit the manual page.
Okay, weiter im Text.
Als nächstes müssen wir dem Apache Webserver beibringen, das er zwischen PHP4 und PHP5 anhand der Dateiendung eurer Scripte den richtigen Interpreter aufruft.
Das geht so:
< IfModule mime_module>
[..]
Action php4-script “/usr/home/_CGI/php4″
AddHandler php4-script .php
Action php5-script “/usr/home/_CGI/php5″
AddHandler php5-script .php5
< /IfModule>
Mit der Option Action erstellen wir die Variable php4/5-script und setzen den absoluten Pfad zum PHP-Interpreter fest.
Mit der Option AddHandler teilen wir dem Apache Webserver mit, wir er mit Dateien mit der endung .php umzugehen hat.
In diesem Fall ruft er den Interpreter php4 auf. Dasselbe gilt für PHP5
Jetzt müssen wir das Verzeichnis der Interpreter noch vor direkten Zugriffen schützen, dazu tragt Ihr folgendes in die
httpd.conf ein:
< Dirctory “/usr/home/_CGI/”>
AllowOverride None
Options None
Order deny,allow
Allow from localhost
< /Directory>
So, fast geschafft :)
Wir müssen jetzt noch dem Apache Webserver sagen, das er auch auf index.php bzw. index.php5 als Standard-Datei reagiert.
Erweitert einfach die Option DirectoryIndex, Ihr findet diese Option im Abschnitt
< IfModule dir_module>
DirectoryIndex index.html index.php index.php5
< /IfModule>
Nun könnt Ihr den Apache Webserver starten und PHP4- und PHP5-Scripten füttern :)
Viel Spaß dabei.
PS:
Viele Wege führen zum Ziel, dies ist nur einer von vielen, aber bei mir funktioniert er gut und war schnell umzusetzen :) Sollte jemand verbesserungsvorschläge haben, dann tippt mir einfach eine E-Mail.
Bis dahin,
stonie