Linux

ID #1053

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

Digg it! Artikel ausdrucken Artikel weiterempfehlen Als PDF-Datei anzeigen
Übersetzungsvorschlag für Übersetzungsvorschlag für
Bewertung der Nützlichkeit dieses Artikels:

Durchschnittliche Bewertung: 0 von 5 (0 Bewertungen)

vollkommen überflüssig 1 2 3 4 5 sehr wertvoll

Kommentieren nicht möglich