PLESK 9 + FastCGI + php.ini für jeden vhost

professor

New Member
Hallo,
ich habe im PLESK 9.0.1 PHP als FastCGI aktiviert. Das funktioniert auch super (wenn man den Patch von parallels installiert hat für den websrvmng), allerdings wird für jeden VHOST die gleiche /etc/php5/fastcgi/php.ini verwendet.
Ich möchte aber jedem VHOST seine eigenen php.ini zuweisen. Wie und wo mache ich das genau?
Danke Euch!
 
Das kannst du in jeder vhost.conf mit dem befehl
Code:
php_admin_values
setzen.

z.B.
Code:
<Directory /srv/www/vhosts/yourdomain.tld/httpdocs>
php_admin_values open_basedir none
php_admin_values disable_functions = exec,system,shell_exec,passthru
php_admin_values register_globals = Off
php_admin_values expose_php = Off
php_admin_values magic_quotes_gpc = On
</Directory>
 
Das kannst du in jeder vhost.conf mit dem befehl

Sicher? Soweit ich weiß ist das nur möglich wenn PHP per mod_php eingebunden wird. Bei FastCGI sollte das überhaupt nicht Funktionieren.
 
(wenn man den Patch von parallels installiert hat für den websrvmng)

Hast du zufällig einen Link zu diesem Patch?

Für was ist dieser Patch den genau gut? (Kämpfe auch gerade mit php über fastcgi mit Plesk 9.0.1 unter open suse 10.)

Ich habe leider nichts gefunden auf parallels.com.

*edit*: scheint für windows zu sein, was ich bisher rausfinden konnte.
 
[MOD: Bitte keine Fullquotes! Danke

Der Patch behebt einen wichtige Fehler im websrvmng in Plesk, wenn man FastCGI benutzt:

Irrtümlich schreibt er bei immer wieder Options ExecCGI aber er muss Options +ExecCGI schreiben. Gilt für Unix/Linux-Systeme, tritt aber wohl nur bei Ensatz von mod_rewrite auf.

Hier der Link:
KB Parallels: [HOTFIX] Enabling PHP FastCGI application produces 403 Forbidden error

Installation ist simple und gut beschrieben.

Aber nun hilft mir immer noch keiner mit meinem Prob weiter :-/
Wirklich keine Idee?

Gruß Tom
 
Last edited by a moderator:
Hi Professor,

ich habe das hier schon mal gepostet:

Das ganze geht per vhost.conf.

Beispiel:

Code:
<Directory "/var/www/vhosts/${yourvhost}/httpdocs">
  <Files ~ (\.php)>
    [B]FCGIWrapper "/usr/bin/php5-cgi -c /etc/phpconfigs/${yourvhost}"  .php[/B]
    Options All
  </Files>
</Directory>

Habe das auch auf meinem Blog noch weiter beschrieben: Thoughts Electrique Blog Archive Custom php.ini and URL rewriting in Plesk 9 with fastcgi
 
Hiho,

bei meiner Suche nach individuellen php.inis via PLESK und fastcgi bin ich auf diesen Thread gestossen. Ist wohl der einzig sinnvolle im grossen www.

Leider bekomme ich einen Fehler, wenn ich nach der Änderung an der vhost.conf den Webserver seine Config neu laden lasse.

Syntax error on line 3 of /var/www/vhosts/[VHOST]/conf/vhost.conf:
can't get fastcgi file info: /usr/bin/php5-cgi -c /etc/phpconfigs/[DIR FÜR PHP-INI], errno: 2

Da steht zwar was von Syntax error on line 3 aber ich kann da nichts erkennen. Vielleicht bin ich auch nach dem langen Rumprobieren einfach nur Fehlerblind. Hier der Inhalt meiner vhost.conf

Code:
<Directory "/var/www/vhosts/[DIR DES VHOST]/httpdocs">
   <Files ~ (\.php)>
      FCGIWrapper "/usr/bin/php5-cgi -c /etc/phpconfigs/[DIR FÜR PHP-INI]" .php
      Options All
  </Files>
</Directory>

Kann mir einer sagen woran es hapert?

------------

Hat sich erledigt. Habe das Problem mit einem Wrapper-Script gelöst, dem ich den Pfad zu der php.ini via -c Parameter mitgebe. :)
 
Last edited by a moderator:
Was genau hast du denn nun gemacht? Genau das Problem habe ich ja anderswo schon geschildert. Mit der Methode von SebastianH hätte man ja wieder seine php.ini pro vhost, was ich ja will, allerdings bekomme ich den gleichen Fehler wenn ich das so versuche. Mit einem Wrapper Skript leg ich mich ja wieder auf EINE Datei fest wo dann die php.ini wieder an gleicher Stelle für alle ist. Oder ich müsste für jeden Vhost nen eignen wrapper machen, was ja auch unsinnig ist..
 
Da der oben beschriebene Weg wegen der Fehlermeldung nicht ging, begann ich rumzuexperimentieren. Letztendlich kam ich auf den Trichter, dass ich im Grunde dem VHOST beibringen muss php5-cgi bei php Dateien aufzurufen.

Also habe ich im Ordner des VHOSTs folgende Ordner erstellt.

php-fcgi
php-tmp
php-session

In php-fcgi liegt folgendes Script mit den Zugriffsrechten des VHOST Besitzers. Auch die Ordner selber musste ich dem VHOST Besitzer zuweisen.

php-fcgi-starter said:
#!/bin/sh
PHPRC="/var/www/vhosts/[Ordner des VHOST]/conf/"
export PHPRC
exec /usr/bin/php5-cgi -c /etc/phpconfigs/[Ordner mit php.ini]

Aus welchem Grund auch immer er PHPRC nicht nimmt, aber mit der letzten Zeile klappt es wunderbar. Also sind die die Zeilen 2 und 3 nur noch drin, damit ich das als Variable doch irgendwann noch zum Laufen bekomme.

In der vhost.conf habe ich dann folgendes stehen

PHP:
<Directory "/var/www/vhosts/[Ordner des VHOST]/httpdocs">
   <Files ~ (\.php)>	
   FCGIWrapper /var/www/vhosts/[Ordner des VHOST]/php-fcgi/php-fcgi-starter .php
   Options All
   </Files>
</Directory>

In der php.ini selber habe ich dann die Pfade für /tmp und die Sessions direkt in das Verzeichnis des VHOST (php-tmp, php-sessionum) gelegt und auch gleich den HTTPDOCS Ordner in die open_basedir direktive aufgenommen.

Ob das so korrekt gelöst ist, dass soll wer anders sagen. Der Punkt ist, dass es geht. ;)
 
Last edited by a moderator:
Hallo Leute,

also es muss heisen:

Code:
FCGIWrapper "/usr/bin/php-cgi5 .php

und nicht:

Code:
FCGIWrapper /usr/bin/php5-cgi .php
 
Der Pfad kann sich von System zu System unterscheiden. Für ein Debiansystem ist /usr/bin/php5-cgi vollkommen korrekt. Am einfachsten lässt sich mit "wheris" herausfinden wo ein Programm zu finden ist.
 
Das sieht irgendwie falsch aus...

Zumal dir ein schließendes Anführungszeichen fehlen würde. Bei mir™ funktioniert es übrigens komplett ohne Anführungszeichen. Also so, wie du es für falsch hältst. Der Pfad für die lokale Installation muss natürlich stimmen.
 
Ah , alles zurück, es funktioniert auch ohne das extra Wrapper Script von TEK (LINK: https://serversupportforum.de/threads/plesk-9-fastcgi-php-ini-fuer-jeden-vhost.30038/post-204732), ich hatte ein Leerzeichen im <Directory > vor dem letzten " zuviel...

Grummel....

Und so sieht meine VHOST.CONF für eine eigenständige PHP.INI aus:

HTML:
<Directory "/srv/www/vhosts/DOMAINNAME/httpdocs">
  <Files ~ (\.php)>
    FCGIWrapper "/usr/bin/php-cgi5 -c /etc/php5/Pfad zur eigenen PHP.INI"  .php
    Options All
  </Files>
</Directory>
 
Last edited by a moderator:
Das sollten normal die korrekten PHP5 Interpreter sein:

CentOS: /usr/bin/php-cgi
openSuse: /usr/bin/php-cgi5
Debian: /usr/bin/php5-cgi
 
Last edited by a moderator:
Hallo,

so ich probiere dies nun auf einem CENT OS 5.

Plesk 9.2.3
Cent OS 5.4
PHP 5.2.11

VHOST.CONF (Pfade usw. stimmen alle)

PHP:
<Directory "/var/www/vhosts/meinedomain.local/httpdocs">
  <Files ~ (\.php)>
    FCGIWrapper "/usr/bin/php-cgi -c /etc/phpconfigs/meinedomain.local"  .php
    Options All
  </Files>
</Directory>

Führe ich ein:

PHP:
/usr/local/psa/admin/sbin/websrvmng -a -v

aus.

Kommt die Fehlermeldung:

PHP:
can't get fastcgi file info: /usr/bin/php-cgi -c /etc/phpconfigs/meinedomain.local, errno: 2

Gemäß

http://www.sebastian.himberger.de/b...ni-and-url-rewriting-in-plesk-9-with-fastcgi/

istz die Ursache die psa-mod_fcgid-1.10-3 .

Die Lösung, wäre das man psa-mod_fcgid-1.10-3 zu einer höheren Version bringt ?

Weiss jemand wie ?


rpm -qa |grep fcgi

liefert mir:

psa-mod-fcgid-configurator-1.0-13
psa-mod_fcgid-1.10-3
psa-fcgi-2.4.0-2

Unter CENT OS scheint es wirklich nur mit dem Wrapper Script / siehe vorherige Post zu laufen:

There's not much on this in the PLESK docs or FAQs it seems. And there is no obvious setting in the PLESK admin web either to get a domain-specific php.ini.

For sessions to work, the PHP value sessions.save_path has to be set to a path writable by the current user. Overriding this value in .htaccess does not work any more, since the PHP interpreter runs as FastCGI and not module. Since at least on CentOS 5 Parallels included mod_fcgi < 2.1, options to the FastCGI executable cannot be specified in the httpd.conf either.

So the way to specify a per-domain php.ini would be to modify the apache per-domain configuration and have the httpd call the FastCGI executable using a wrapper script like:

$ cat /var/www/vhosts/somedoma.in/cgi-bin/php-fcgi
#!/bin/sh
export PHPRC='/var/www/vhosts/somedoma.in/conf'
exec /usr/bin/php-cgi "$@"

The php.ini would then be searched for in the ./conf subdirectory of the domain.

This setup works great for me on another server without PLESK and based on Fedora. But on the Plesk 9/CentOS 5 based machines, the php-cgi seems to ignore PHPRC and command line options like -d and -c.
 
Last edited by a moderator:
php.ini per vhost

Hallo ich ha da was für euch gefunden, soll auch nur ein denkansatz sein.
weil die anleitung so funktioniert *ggg*
http://forum.parallels.com/showthread.php?t=92562
Code:
1. Move /usr/bin/php-cgi to /usr/bin/php-cgi.app

2. Create a new /usr/bin/php-cgi file and put the following lines in it:
Code:

#!/bin/sh
#
# Custom PHP FCGID wrapper for Plesk domains
#
 PHPRC="/etc/php-ini.d/php-${UID}.ini"
 [ -f ${PHPRC} ] || PHPRC="/etc/php.ini"
 export PHPRC 
 exec /usr/bin/php-cgi.app

3. Create the directory /etc/php-ini.d/

4. Check domain/ftpuser UID for which you want to have a custom php.ini.
Example /etc/passwd:
icann:x:10001:2523::/home/httpd/vhosts/icann.org:/bin/false

4. Copy the original /etc/php.ini to /etc/php-ini.d/php-10001.ini

5. Make any changes you want to php-10001.ini

6. Run service httpd reload


wieder drauf achten das ihr die richtige php?-cgi? nutzt.
vieleicht hat ja jemand lust das ding anzupassen damit die php.in im vhost der jeweiligen domain abgeholt wird.
und halt den passenden befehl zum restarten des apache benutzen.

gruß wolfgang
 
Last edited by a moderator:
Back
Top