[HowTo] Confixx3, Debian / Ubuntu, PHP als FCGI

djrick

Registered User
Hallo,

Nachdem ich nun selbst etwas rumgetüftelt habe, habe ich nun ein Howto geschrieben, wie man PHP als FCGI laufen lassen kann im Zusammenspiel mit Confixx.

Grundlagen auf die ich mich stütze:
1.) Confixx mit fcgid • puzich.com :: I took the blue pill
2.) http://www.puzich.com/wp-content/sunlog/images/php-fcgi-starter_create.phps
3.) http://www.aaron-spettl.de/ubuntu/debian-etch-apache2-php5-fcgi-suexec.php

Step 1:
PHP FCGI und Konsorten installieren:
Code:
apt-get install php5-cgi apache2-mpm-worker libapache2-mod-fcgid
Danach will Debian / Ubuntu wahrscheinlich mod_php und den Prefork deinstallieren...das geht soweit in Ordnung :)

Step 2:
In den Confixx Scripts alles auf suPHP umstellen:
Code:
/pfad/zu/confixx/admin/admin.pl
Dort unter Punkt 2, Webserver: mod_php ausschalten, suPHP anschalten.
Den Adminbereich verlassen.
Danach:
Code:
/pfad/zu/confixx/admin/updates/update_3x.pl
(das dauert was)

Step 3:
Apache2 anpassen:
Code:
vim /etc/apache2/apache2.conf
Am Ende einfügen:
Code:
Include /etc/apache2/confixx_special_vhost.conf

AddHandler fcgid-script .php
AddHandler fcgid-script .php4
AddHandler fcgid-script .php5
AddHandler fcgid-script .phtml

Die o.g. *.conf Datei erstellen:
Code:
touch /etc/apache2/confixx_special_vhost.conf

Step 4:
PHP Fcgi Wrapper Scripte anpassen.
Wir nehman dazu das Script von dieser Seite:
http://www.puzich.com/wp-content/sunlog/images/php-fcgi-starter_create.phps

Wir kopieren also den Inhalt der Webseite in die Datei:
Code:
/usr/local/bin/confixx_fcgi.php

Für den Gebrauch mit Confixx hab ich die Datei etwas abgeändert:
Code:
$conf_path      = '/var/www/';
Da bei mir alle Kunden unterhalb von /var/www liegen. Also /var/www/web1 etc.
Aus:
Code:
// user-dir exists?
 if ( !file_exists($user_path) ) {
Wird:
Code:
// user-dir exists?
 if ( file_exists($user_path) ) {
Weil die Schleife sonst dort abricht, aber die Verzeichnisse bestehen ja schon.

Die darauffolgenden Zeilen kommentieren wir aus:
Code:
   // mkdir($user_path);
   // chown($user_path, $data['kunde']);
   // chgrp($user_path, $data['kunde']);
   // chmod($user_path, 0755);

Dann, aus:
Code:
 fwrite($fh, '<Directory "/home/httpd/htdocs/' . $data['kunde'] . '/html">'."\n");
Wird:
Code:
fwrite($fh, '<Directory "/var/www/' . $data['kunde'] . '/html">'."\n");
Und aus:
Code:
fwrite($fh, '  FCGIWrapper /home/httpd/php-fcgi-scripts/' . $data['kunde'] . '/php5-fcgi-starter .php'."\n");
wird:
Code:
fwrite($fh, '  FCGIWrapper /var/www/' . $data['kunde'] . '/php5-fcgi-starter .php'."\n");

Damit sind wir schon mit dem Bearbeiten des Scripts fertig. Somit liegen die Startscripte für den Wrapper jetzt in dieser Form vor:
Code:
/var/www/web1/php5-fcgi-starter
Jetzt könnte man einweden: "Ja toll und was ist wenn ein Confixx Kunde per FTP die Datei löscht?" Antwort: Kann nichts passieren, da das Erstell-Scripte diese Dateien mit dem "immutable bit" sichert. Sprich: Die Datei gehört zwar dem jeweiligen User, aber sie und selbst der root können die Datei nicht löschen. (Lediglich der Root kann dieses Bit durch chattr -i ... wieder entziehen und dann löschen).

Soweit so gut...fertig für einen ersten Testlauf?
Code:
php /usr/local/bin/confixx_fcgi.php
/etc/init.d/apache2 force-reload
(oder halt neustarten, wenn er zuvor beendet wurde).

Jetzt sollte alles wieder laufen. Wenn dem so ist, müssen wir jetzt nur noch sicherstellen, dass bei der Erstellung eines neuen Users, auch die Wrapperscripte angelegt werden etc.

Das macht man am besten, indem man das Script per Cronjob aufruft. Sollte jemand hier an diesem Punkt einen besseren Vorschlag haben: Bitte immer her damit. Eigentlich braucht das Script ja lediglich bei dem Ereignis "on new confixx user" laufen :)

Anmerkung: Wir müssen das Script umändern, so dass die Wrapperscripte unterhalb des jeweiligen Confixxusers liegen, weil es sonst zu dem suEXEC Fehler kommt: "cannot get docroot information (/var/www)", da /var/www und andere Sachen nicht dem jeweiligen User gehören die gerade das Script ausführen wollen sondern root oder sonst wem.


Verbesserungsvorschläge sind jederzeit willkommen.
 
Hi,

Bei mir Lief es nicht. Mit folgender Änderung ging es dann:
Die Ordner unter /var/www (web1-webX) gehörten root:root und nicht webX:webX. Das habe ich geändert.
Jetzt scheint es zu gehen...
 
Last edited by a moderator:
Hi,

so, wie gesagt, meine einzelnen Pages laufen nun wieder.
Nur mein confixx sowie phpmyadmin nicht.
Dort erhalte ich immer den Fehler:

Zugriff verweigert!

Der Zugriff auf das angeforderte Objekt ist nicht möglich. Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 403
 
Hab das jetzt auch endlich zum laufen gebracht, genau das mit den rechten von webX Verzeichnissen musste ich auch ändern.

Habe aber leider auch das Problem das Confixx/phpmyadmin nun nicht mehr läuft...

@hookx
hast Du schon eine Lösung für Confixx/phpmyadmin gefunden?
 
Das ist erst beim Update von Confixx mit dabei. Wenn du eine aktuelle Version von Confixx hast, kannst du das Update trotzdem drüber laufen lassen.
 
Hallo Danke für Deine schnelle Antwort

ICh versuche suPHP schon zum x mal einzustellen habe mir gerade die update_3.x.pl besorgt und draufgespielt

Leider bekomm ich das alles nicht hin, im confixx bekomm ich jetzt beim erstellen eines benutzers folgende meldung:

Warning: include(/var/www/confixx/events.inc.php) [function.include]: failed to open stream: Permission denied in /var/www/confixx/html/events.inc.php on line 2

Warning: include() [function.include]: Failed opening '/var/www/confixx/events.inc.php' for inclusion (include_path='.:/var/www/confixx/html/include:/var/www/confixx/html:/var/www/confixx/html/PEAR') in /var/www/confixx/html/events.inc.php on line 2

irgend was mach ich immernoch falsch??
 
Back
Top