Linux
PHP als FCGI in Apache VHost einbinden (mit suexec)
Installation
mod_fastcgi installieren und aktivieren. (apache neustarten)
Wichtig: Basis ist hier Suse (9.3) !!!
Konfiuration
/etc/apache2/conf.d/mod_fastcgi.conf:
hier kommt nur das wichtige:
ScriptAlias /fcgi-bin/ /srv/www/fcgi-bin/ FastCgiIpcDir /var/lib/apache2/fastcgi AllowOverride None Options +ExecCGI -Includes SetHandler fastcgi-script Order allow,deny Allow from all FastCgiConfig -singleThreshold 100 -killInterval 300 -autoUpdate -idle-timeout 120 -pass-header Authorization FastCgiWrapper /usr/sbin/suexec2 AllowOverride None Options +ExecCGI -MultiViews -Indexes Order allow,deny Allow from all
# geht nicht global, weil individuell für User sein muss ScriptAlias /php-cgi /srv/www/php-fcgi-scripts/default SuexecUserGroup wwwrun www
# Global den Handler festlegen #AddHandler php-fastcgi .php
SetHandler fastcgi-script Options +ExecCGI SetHandler fastcgi-script Options +ExecCGI SetHandler fastcgi-script Options +ExecCGI Action application/x-httpd-php4 /php-cgi/php445-fcgi-starter Action application/x-httpd-php445 /php-cgi/php445-fcgi-starter Action application/x-httpd-php5 /php-cgi/php523-fcgi-starter Action application/x-httpd-php520 /php-cgi/php520-fcgi-starter Action application/x-httpd-php523 /php-cgi/php523-fcgi-starter
Nun weiß, der Apache was mit den Handlern anzufangen.
Man kann jetzt also entweder global (siehe oben), in der VHost-Config oder über .htaccess gesteuert die Zuordnun der Dateien zu den Handlern vornehmen.
Wichtig ist, dass für jeden Kunden/User die Location "/php-cgi" definiert werden muss.
Ein Beispiel für ne VHost-Config:
SuexecUserGroup kunde kunde ScriptAlias /php-cgi /srv/www/php-fcgi-scripts/kunde AddType application/x-httpd-php5.php
alternativ kann man auch den AddType in eine .htaccess-Datei packen.
Bis hierhin heißt es also:
Wenn bei der Kunden-Präsenz eine .php-Datei aufgerufen wird, sieht er, dass der Handler "application/x-httpd-php5-mysql" genutzt wird. Dann guckt er in der mod_fcgi-Config und sieht, dass er die Datei an das Script "/php-cgi/php523-fcgi-starter" übergeben soll. Dann ist noch gesagt, dass das Script als Fast-CGI ausgeführt werden darf.
Woher weiß er jetzt, wo sich "/php-cgi" befindet, wo ja das Starter-Script drin ist? Das muss für jeden Kunden festgelegt werden. Hierbei ist auch wichtig, dass die Suexec User- und Group-Infos übergeben, weil sonst das Script nicht startet.
Jetzt ist also alles klar. Geht es nur noch darum, was macht eigentlich das Startet-Script?
Das Script startet PHP. Hierbei läuft alles unter dem User des Kunden.
Unter "/srv/www/php-fcgi-scripts/kunde" liegt das Starter-Script.
Wichtig: Sowohl "/srv/www/php-fcgi-scripts/kunde", als auch alles darunter muss mit User und Group dem Kunden gehören und für ihn zugreifbar sein!
h12345:/srv/www/php-fcgi-scripts/kunde # ls -la insgesamt 16 drwxr-xr-x 2 kunde kunde 4096 2007-11-29 17:38 . drwxr-xr-x 11 root root 4096 2007-12-11 15:45 .. -rwxr-xr-x 1 kunde kunde 212 2007-07-25 19:45 php445-fcgi-starter -rwxr-xr-x 1 kunde kunde 216 2007-11-10 20:21 php523-fcgi-starter
hierbei ist zu beachten, dass der Kunde das Script ändern könnte, weil es ja ihm gehört. Daher ist wichtig es abzusichern mit einem ext3-Filesystem kann man das mit "chattr +i php523-fcgi-startet" erledigen. Das setzt auf Dateisystemebene das Imunable-Bit. Mit lsattr kann man sich prüfen.
/srv/www/php-fcgi-scripts/kunde/php523-fcgi-starter:
#!/bin/sh PHPRC="/srv/www/php/conf/kunde/php.ini" export PHPRC #PHP_FCGI_CHILDREN=4 # optional, wenn nicht angegeben, wird Optimun gesucht #export PHP_FCGI_CHILDREN # muss dann mit auskommentiert werden, wenn Anzahl der Child-Prozesse festgelegt wird exec nice -n 10 /srv/www/php/php523f/bin/php-cgi -c /srv/www/php/conf/kunde/php.ini
Hier starte ich also ein vorher kompiliertes php-fcgi mit einer definierten php.ini, die auf den Kunden zugeschnitten sein kann.
Die PHP-Installation muss nur lesbar/ausführbar sein, Schreib- oder Eigentümerrechte sind nicht mehr nötig.
h12345:/srv/www/php/php523f # ls -la insgesamt 20 drwxr-xr-x 5 root root 4096 2007-07-27 12:51 . drwxr-xr-x 17 root root 4096 2007-10-17 14:54 .. drwxr-xr-x 2 root root 4096 2008-02-01 16:34 bin drwxr-xr-x 2 root root 4096 2007-10-02 03:00 conf drwxr-xr-x 8 root root 4096 2007-09-30 16:11 share
Tags: suexec, fcgi, fast-cgi, php, apache
Verwandte Artikel:
Letzte Änderung des Artikels: 2008-04-10 23:43
Verfasser des Artikels: Florian Schrön
Revision: 1.14
Kommentieren nicht möglich