Debian / Plesk 8.2 / PHP5 als cgi
Hallo,
Als allererstes mal einen großen Reskpekt an den Macher dieses Threads, richtige coole Leistung. Nachdem ich mir diesen und ich glaube so 100 andere durchgelesen hatte um endlich php5 parallel zu php4 als cgi laufen zu lassen hab ich quasi eine IDEE kombiniert aus diesem Thread und einem aus dem Plesk Forum genutzt um dies quasi innerhalb von 2 Minunten zu bewerkstelligen, das wollte ich den Rest der evtl. mit gleicher Config wie ich, also Debian, Plesk 8.2 usw arbeitet, wissen lassen.
Man kann sagen das ist die Methode für faule bzw. Leute die nicht groß am System fummeln wollen.
1. Ins Plesk Control Panel gehen auf den "Updater" und "SiteBuilder and Sitebuilder module for Plesk" herunterladen.
Hintergrund: Dieser installiert das Plesk eigene php5-cgi binary mit.
2. suexec neu kompilieren wie in
https://serversupportforum.de/threads/mini-howto-suexec-neukompilieren.2540/ beschrieben, allerdings mit den Anpassungen suexec.h:
Code:
#ifndef AP_HTTPD_USER
#define AP_HTTPD_USER "www-data"
#endif
Code:
#ifndef AP_LOG_EXEC
#define AP_LOG_EXEC "/var/log/apache2/suexec.log" /* Need me? */
#endif
Code:
#ifndef AP_DOC_ROOT
#define AP_DOC_ROOT "/var/www/vhosts"
#endif
besonders die letzte Änderung hier bewirkt das wir hinterher das php Binary im Pfad der jeweiligen Domain "/var/www/vhosts/domain.tld/bin" ausführen können ohne dass das File dem FTP-Benutzer gehören muss und wir trotzdem immernoch eine eigene "php.ini" pro Domain verwenden können.
Änderungen an der suexec.c (von Freel@ncer14):
Code:
/*
* Error out if the target name/group is different from
* the name/group of the cwd or the program.
*/
if ((uid != dir_info.st_uid) ||
(gid != dir_info.st_gid) ||
(uid != prg_info.st_uid) ||
(gid != prg_info.st_gid)) {
log_err("target uid/gid (%ld/%ld) mismatch "
"with directory (%ld/%ld) or program (%ld/%ld)\n",
uid, gid,
dir_info.st_uid, dir_info.st_gid,
prg_info.st_uid, prg_info.st_gid);
exit(120);
}
ändern in:
Code:
/*
* Error out if the target name/group is different from
* the name/group of the cwd or the program.
*/
[COLOR="Red"]/* Disabled[/COLOR]
if ((uid != dir_info.st_uid) ||
(gid != dir_info.st_gid) ||
(uid != prg_info.st_uid) ||
(gid != prg_info.st_gid)) {
log_err("target uid/gid (%ld/%ld) mismatch "
"with directory (%ld/%ld) or program (%ld/%ld)\n",
uid, gid,
dir_info.st_uid, dir_info.st_gid,
prg_info.st_uid, prg_info.st_gid);
exit(120);
}
[COLOR="Red"]*/[/COLOR]
3. Unter "/var/www/vhosts/domain.tld/conf/" oder "/var/www/vhosts/domain.tld/subdomain/name/conf" (falls Subdomain) eine vhost.conf mit folgendem Inhalt anlegen:
ScriptAlias /php5-cgi-custom /var/www/vhosts/domain.tld/bin
Action application/x-httpd-php5-custom "/php5-cgi-custom/php5"
AddType application/x-httpd-php5-custom .php
Wobei "domain.tld" natürlich zu ersetzen ist mit euren Daten. Ich habe mir wie man oben sieht unter "/var/www/vhosts/domain.tld/bin" die php5 binary abgelegt.
Das php5 binary was Ihr braucht befindet sich in "opt/php52/bin" und heißt "php5-cgi". Nach obigem Beispiel der vhost.conf also:
cp /opt/php52/bin/php5-cgi /var/www/vhosts/domain/bin/php5
cd /var/www/vhosts/domain
chown -R root.root bin/
chmod 755 bin/
Wer noch eine php.ini Datei "pro User" verwenden möchte, kopiert in den gleichen Pfad noch die entsprechende php.ini:
cp /opt/php52/etc/php5/cgi/php.ini /var/www/vhosts/domain/bin
cd /var/www/vhosts/domain/bin
chown root.root php.ini
chmod 644 php.ini
Damit das ganze nun greift, wie üblich bei Plesk einmal:
/opt/psa/admin/sbin/websrvmng -a -v
ausführen und die vhost.conf wird für die jeweilige Domain mit verwendet.
Die entsprechende php.ini für die CGI Version findet man unter "/opt/php52/etc/php5/cgi/" und kann diese gemäß seinen Vorstellungen anpassen.
Im Control Panel von Plesk sollte man schließlich noch php und cgi für die Domain aktivieren und schon läuft das ganze und zwar einfach ohne weiter etwas machen zu müssen, weder braucht man suexec noch php5 selbst kompilieren. Um das ganze wieder loszuwerden, also die Domain wieder unter php4 als mod laufen zu lassen einfach das jeweilige vhost.conf file löschen und nochmal
/opt/psa/admin/sbin/websrvmng -a -v
ausführen.
Wer möchte kann natürlich auch in dem vhost.conf file einfach die Zeile
AddType application/x-httpd-php5-custom .php
in
AddType application/x-httpd-php5-custom .php5
ändern und hat so den Effekt das alle php Dateien die mit .php5 enden mit der CGI Version ausgeführt werden, der rest mit php4 als mod.
Natürlich wird aufgrund der bereits vorhandenen SuExexUserGroup Direktive die Plesk ja anlegt (/var/www/vhosts/domain/conf/httpd.include) alles brav als der jeweils richtige Benutzer ausgeführt.
Im Endeffekt haben wir das gleiche was "server4downs" mit seinem Patch gemacht hat, allerdings wie ich finde auf einen etwas schnelleren weg, außerdem angepasst an Plesk ohne viel Aufwand. Zusätzlich können wir noch pro Domain eine php.ini benutzen (optional) was mit seiner Methode nicht möglich war, wobei das natürlich sicherlich realisierbar ist.
Im Anhang hier noch die angepasste suexec.h und suexec.c
Gruß nEUTRon.