Erfahrungen apache2 mit PHP 5 als FastCGI

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
cirox
Beiträge: 70
Registriert: 23.06.2006 20:37:57

Beitrag von cirox » 10.03.2007 04:20:57

@ kase Du bist genial :) Von Ihm stammen eigenlich alle Vorgehensweisen.

Verwendung von libapache2-mod-fcgid_1.10-2 unter sarge mit Apache 2.0.54. Zwischen den PHP Versionen kann mithilfe einer .htaccess Datei umgeschaltet werden.

zuerst nach dieser Anleitung das Paket nach sarge holen.

Bevor wir

Code: Alles auswählen

dpkg-buildpackage 
ausführen ändern wir die Abhängigkeite unter libapache2-mod-fcgid-1.10/debian/control:

Code: Alles auswählen

Build-Depends: debhelper (>= 4.0.0), apache2-threaded-dev, libtool, cdbs, libapr0-dev, pkg-config
Depends: apache2-common
danach:

Code: Alles auswählen

dpkg-buildpackage
cd ..
dpkg -i libapache2-mod-fcgid-1.10_i386.deb 
Fehlende Pakete per apt-get installieren.

Jetzt noch ein:

Code: Alles auswählen

for mod in fcgid; do a2enmod $mod; done
und das Modul ist aktiviert.

Danach wird genau so wie im Debianhowto verfahren. Mit dem "i" Bit und dem Starter.

Suexec ist aktiviert und wird auch so in den VHOST geschrieben:

Code: Alles auswählen

SuexecUserGroup VHOST_user VHOST_group
Die 2 Starter für beide PHP Versionen liegen unter "/var/www/php-fcgi-scripts/VHOST/" einmal der php-cgi-starter und der php4-cgi-starter.

Der Inhalt könnte so aussehen:

Code: Alles auswählen

#!/bin/sh
PHPRC="/etc/apache2/ini/VHOST/php5"
export PHPRC
PHP_FCGI_CHILDREN=2
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /pfad/zum/php5-binary/php
und

Code: Alles auswählen

#!/bin/sh
PHPRC="/etc/apache2/ini/VHOST/php4"
export PHPRC
PHP_FCGI_CHILDREN=2
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /pfad/zum/php4-binary/php
Wir verzichten auf die "FCGIWrapper" Angabe sondern gehen nach dem Debianhowto den Weg:

fcgi.conf:

Code: Alles auswählen

 SocketPath /var/lib/apache2/fcgid/sock
 IPCConnectTimeout 20
AddHandler php-fastcgi .php
AddHandler php4-fastcgi .php4
<Location /fcgi/php-fcgi-starter>
        SetHandler fcgid-script
        Options +ExecCGI
</Location>
<Location /fcgi/php4-fcgi-starter>
        SetHandler fcgid-script
        Options +ExecCGI
</Location>
Action php-fastcgi /fcgi/php-fcgi-starter
Action php4-fastcgi /fcgi/php4-fcgi-starter
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
In den VHOST kommt folgendes rein:

Code: Alles auswählen

ScriptAlias /fcgi/ /var/www/php-fcgi-scripts/VHOST/
        <Directory "/var/www/php-fcgi-scripts/VHOST">
                AllowOverride None
                Options +ExecCGI -MultiViews -Indexes
                Order allow,deny
                Allow from all
        </Directory>
AddHandler php4-fastcgi .php4
AddHandler php-fastcgi .php
danach noch:

Code: Alles auswählen

/etc/init.d/apache2 restart
Jetzt gehen erstmal alle .php Datein durch PHP5 und alle .php4 Dateien durch PHP4

Wenn wir über eine .htaccess Datei auf PHP4 schalten wollen muss folgendes in dieser hinzugefügt werden:

Code: Alles auswählen

AddHandler php4-fastcgi .php
PS: Wenn einer eine Lösung hat mit der Anweisung FCGIWrapper dann bitte posten, da in der neuesten fcgi Version direkt Direktiven innerhalb dieses Wrappers angewandt werden können.

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 10.03.2007 18:20:55

Du solltest noch erwähnen, dass die Zeile:

Code: Alles auswählen

echo "APT::Default-Release \"testing\";" >> /etc/apt/apt.conf.d/70debconf
für Debian Sarge unbedingt:

Code: Alles auswählen

echo "APT::Default-Release \"stable\";" >> /etc/apt/apt.conf.d/70debconf
heißen sollte, sonst setzt man das falsche Default-Release :)

Zonk
Beiträge: 70
Registriert: 27.09.2005 11:00:31
Kontaktdaten:

Beitrag von Zonk » 11.03.2007 22:04:20

ok ich habe jetzt folgen können und habe es am laufen mit fcgid..

das php file wird auhcschön angezeg ,aber nu nsteh ich wieder an der genau gleiche symphtomaik wie am anfang.. alleswird brav ausgeführ,t auhcwenn suexec einschriten sollete - es aber NICHT tut...

und das suexec logfile schweigt......


ihcwerd jetzt mal ein ganz neues debian aufsetzen
Who believes to be has stopped to become

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 11.03.2007 22:46:27

Was willst du denn bei suexec groß einrichten?

mod_fcgid hat eine integrierte suexec Steuerung, das einzigste, was du im vHost setzen musst, ist SuexecUserGroup user group.

Zonk
Beiträge: 70
Registriert: 27.09.2005 11:00:31
Kontaktdaten:

Beitrag von Zonk » 11.03.2007 23:03:19

Ja Das frage ich mich auch... mich wundert halt serh was der Suexec macht..


meine erwartung an suexec:
es wechslt den user, und wenn das PHP-File was ausgeführt werdne soll, nicht dem SuexecUserGroup-Usergehört, gibt er eine Mismatch-Fehlermedung aus und bricht ab, selbst wenn der eigentliche Besitzer der Datei so offen war und sie mit den Rechten 777 ausgestattet hat..

Das was passiert:
Suexec/PHP führt die Datei fröhlich aus, egal was passiert, nur wenn sie dem Falschen gehört und auf 700 gestellt ist, kann er sie nicht ausführen... aber von Mismach-Warnungen und Abbruch keine Spur...

ich meine keiner bricht in eine Maschine ein, um seine Schadecode-Files dann freiwillig auf 700 zu begrenzen.....



bin ich etwa auf dme holzweg?

Danke für die hilfe, Zonk
Who believes to be has stopped to become

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 11.03.2007 23:07:31

Also mal nach der Reihe :)

Du benutzt mod_fcgid, oder benutzt du mod_fastcgi?

Falls mod_fcgid, poste mal bitte deine fcgid.conf und die Config eines kompletten vHost.

Außerdem wäre die error.log des Apachen interessant, wo man sieht, dass die php-fcgi Prozesse starten.

Edit: Außerdem bitte die Ausgabe von "a2enmod fcgid suexec"

Zonk
Beiträge: 70
Registriert: 27.09.2005 11:00:31
Kontaktdaten:

Beitrag von Zonk » 11.03.2007 23:16:46

ok:)


also ich nutze mod_fcgid
php habe ich selberkompiliert.
PHP seiten werdne wie gewünscht ausgeführ,t abernicht durch suexec abgebrochen beim user-mismatch.

meine fcgid.conf lautet:

Code: Alles auswählen

 SocketPath /var/lib/apache2/fcgid/sock
  IPCConnectTimeout 20
  AddHandler php-fastcgi .php
  <Location /fcgi/php-fcgi-starter>
     SetHandler fcgid-script
     Options +ExecCGI
  </Location>
   Action php-fastcgi /fcgi/php-fcgi-starter
  AddType application/x-httpd-php .php
mein Vhost:

Code: Alles auswählen

<VirtualHost *:80>
        ServerAdmin me@domain.de
        ServerName domain.de
        ServerAlias www.domain.de

        DocumentRoot /var/www/default/web
        DirectoryIndex index.php index.html index.htm

        SuExecUserGroup vhostuser vhostgroup


       <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/www/default>
                Options FollowSymLinks
                AllowOverride AuthConfig
                Order allow,deny
                allow from all
                FCGIWrapper /var/www/php-fcgi-scripts/default/php-fcgi-starter .php
        </Directory>

        ScriptAlias /fcgi/ /var/www/php-fcgi-scripts/default/
           <Directory "/var/www/php-fcgi-scripts/default">
              AllowOverride None
              Options +ExecCGI -MultiViews -Indexes
              Order allow,deny
              Allow from all
           </Directory>
        AddHandler php4-fastcgi .php4
        AddHandler php-fastcgi .php

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel debug

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

        Alias /icons/ "/usr/share/apache2/icons/"
        <Directory "/usr/share/apache2/icons">
            Options Indexes MultiViews
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
</VirtualHost>
meine Ordnerstruktur: (mein Vhost lautet default)

Code: Alles auswählen

drwxr-xr-x  4 root      root       1024 2007-02-28 12:30/var/www/default
drwxr-xr-x  2 root      root       1024 2007-02-28 12:58 /var/www/default/conf
-rw-r--r--  1 root root 20 2007-02-28 12:58 /var/www/default/conf/php.ini

drwxr-xr-x  2 vhostuser vhostgroup 1024 2007-02-28 14:07 /var/www/default/web
-rwx------  1 root root 17 2007-02-28 10:07 /var/www/default/web/index.php
-rwx------  1 vhostuser vhostgroup 19 2007-02-28 13:55 /var/www/default/web/test.php

Eigentlich sollte ja die index.phph wegen falschen Besitzer nicht laufen.. tut sie aber solang ich sie mit 777 ausgestattet habe...

Mein Suexec gibt jetzt wieder ausgaben auf dem Logfile aus, eit meich alles von mod_fastcgi getilgt habe...

leider immer nur

Code: Alles auswählen

[2007-03-10 19:56:33]: uid: (1001/vhostuser) gid: (1001/1001) cmd: php-fcgi-starter
also leider nix mit usermismatch oder sowas, was mir zeigne würde das suexec im Fehlerfall die Ausführung verhindern würde.

Danke Torben
Who believes to be has stopped to become

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 11.03.2007 23:44:43

Baue mal deine Configs anders auf...

Aus der fcgid.conf kannst du alles andere rausnehmen außer

Code: Alles auswählen

  AddHandler fcgid-script .fcgi
  SocketPath /var/lib/apache2/fcgid/sock
Mehr brauchst du nicht.

Aus deinem vHost kannst du folgendes machen:

Code: Alles auswählen

<VirtualHost *:80>
        ServerAdmin me@domain.de
        ServerName domain.de
        ServerAlias www.domain.de

        DocumentRoot /var/www/default/web
        DirectoryIndex index.php index.html index.htm

        SuexecUserGroup vhostuser vhostgroup

       <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/www/default>
                Options -All +FollowSymlinks +ExecCGI
                AllowOverride AuthConfig
                Order allow,deny
                allow from all
                # FCGID-PHP-Teil
                FCGIWrapper /var/www/php-fcgi-scripts/default/php-fcgi-starter .php
               AddHandler fcgid-script .php
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel debug

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

        Alias /icons/ "/usr/share/apache2/icons/"
        <Directory "/usr/share/apache2/icons">
            Options Indexes MultiViews
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
</VirtualHost>
Du solltest nahezu copy&paste machen können. Du hast extrem viele Directiven drin, die du überhaupt nicht benötigst.

Deine gepostete Log

Code: Alles auswählen

[2007-03-10 19:56:33]: uid: (1001/vhostuser) gid: (1001/1001) cmd: php-fcgi-starter
sieht sehr gut aus, genauso soll sie aussehen. Suexec startet deinen php-fcgi-starter als 1001, exakt richtig.

Deine PHP-Dateien sollten alle vhostuser:www-data mit den Rechten 740 sein.

Code: Alles auswählen

chown vhostuser:www-data /var/www/default/web
chown vhostuser:www-data /var/www/default/web/*
chmod 740 /var/www/default/web/*

Zonk
Beiträge: 70
Registriert: 27.09.2005 11:00:31
Kontaktdaten:

Beitrag von Zonk » 11.03.2007 23:52:35

ok habs eingesetzt, Server läuft auch, soweit bin ich glücklich.

nun zur Masterfrage: verhindert Suexec jetzt die ausführung der Kuckukseier?

leider nein, man kann noch imemr phpdateien eines beliebigen Owners ausführe, solang der nur Nett genug ist die datei auf 777 zu setzen..

Was macht denn dein Apache, wenn du im Docroot eine test.php öffnen magst die dem user root:root gehört?
Who believes to be has stopped to become

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 12.03.2007 00:16:08

Zuerst solltest du nachsehen, ob die php-fcgi-starter wirklich dem User vhostuser gehören.

Code: Alles auswählen

debian:~# ps ax -o pid,user,group,cmd | grep php | grep -v grep
 2602 timo     timo     /usr/bin/php5-cgi
Hier gehören sie "timo timo", du hast aber erst php-fcgi Prozesse, wenn du nach einem Serverneustart min 1 php Datei ausgeführt hast.

----------

Php Dateien, die chmod 777 sind, können IMMER ausgeführt werden. Das ist leider nicht zu verhindern, mit dieser Config.

Du solltest in deinem FTP oder SCP Server einstellen, dass neue Files USER:www-data 740 sind, dann kannst du sicher gehen, dass kein vHost die Dateien eines anderen sehen kann.

Durch die richtige Konfiguration haben deine User überhaupt kein Grund, die Dateien 777 zu chmodden. Bei mod_php muss man das manchmal, weil man sonst keine Schreibrechte auf die Files hat. Dies entfällt hier aber, da suexec die Prozesse ja auf den richtigen User setzt.

Am besten du liest dir dazu nochmal diesen Post durch, da habe ich eigentlich alles recht ausführlich erklärt:

http://www.debianforum.de/forum/viewtop ... 890#498890

Suexec ist wie gesagt nicht dazu da, die Fehler von Usern auszugleichen. Suexec setzt User und Group von deinen PHP-Prozessen, damit man mit PHP keine fremden Files zB mit http://www.php.net/system öffnen kann. Natürlich ist hier Vorraussetzung die richtige Config, sprich vhostuser:www-data 740.

Wenn du sicher gehen willst, dass die User keine Quatsch machen, kannst du auch hier einen Cron machen, der die Rechte recursiv immer richtig setzt, siehe anderer Post. Du könntest sogar dich und den User per Mail benachrichtigen, wenn du Scripte findest, die irgendwelche Rechte für OTHERS haben. (man bash)

Edit: Dein scp/ftp Server muss natürlich ins Verzeichnis deines Users "chrooten", sonst kann man evtl fremde files per FTP einsehen, da man ja read Rechte über die Gruppe hat. Apache macht das ja quasi automatisch mittels DocRoot, eine Chroot Option bieten allerdings alle gängigen FTP und SCP Server.

Zonk
Beiträge: 70
Registriert: 27.09.2005 11:00:31
Kontaktdaten:

Beitrag von Zonk » 12.03.2007 00:21:04

JA die PHP-starter gehören den richtigen Usern.

Also lief bie mir immer alles so wie es ollte, nur suexec hat garnicht die aufgabe prozesse zu killen, wenn die Zieldatei ned der suexec-person gehört?

Ok dann noch ein letzter nicht verstandener Apekt:

wann entstehend dann diese "uid/gid mismatch" Fehlermeldungen im Suexec-Log? Darauf hatte ich ja ursprünglich gewartet weil ich dachte zu Beginn meines ersten SuexecSetups vor 1 Jahr hat er falsche Dateieen ganz abgestraft und nicht ausgeführt.. (500 internal server error)

klar mittels dem ftp umask kann ich die Files dann schon auf 740 setzen und alles funktioniert....


Gute NAcht und Danke ( morgen gehts weiter) Zonk
Who believes to be has stopped to become

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 12.03.2007 00:27:47

Dein Denkfehler ist:

Suexec startet NICHT die PHP Dateien. Das, was Suexec startet, sind die php-fcgi-starter. Wenn du einem php-fcgi-starter die Rechte root:root 777 gibst, wird dir suexec 100% einen Fehler (owner missmatch, bzw file is world-writeable) im suexec.log posten, und keine Prozesse starten.

Suexec setzt den User deiner PHP-Prozesse. Die Sicherheit, dass user 1 keine php Files von user2 lesen kann, bietet dir nicht suexec, sondern die richtigen Rechte der Dateien. Ein PHP-Prozess, der als User1:User1 läuft, kann nun mal keine Dateien öffnen, die User2:www-data 740 gehören, und genau das ist das Ziel.

Zonk
Beiträge: 70
Registriert: 27.09.2005 11:00:31
Kontaktdaten:

Beitrag von Zonk » 12.03.2007 09:29:54

Hah, cool,

das War der letzte Fehlende Baustein in der Versteh-Kette :))))

Vielen Vielen Dank!!


Wegen chroot muss ich mal gucken, hab da bisher nix bewust implementiert :)


Danke Zonk
Who believes to be has stopped to become

netzmeister
Beiträge: 25
Registriert: 30.01.2005 22:13:49
Kontaktdaten:

Beitrag von netzmeister » 21.03.2007 22:16:12

Hallo,
habe ein Problem mit suexec. Soweit funktioniert alles.
Alle Rechte gesetzt, alle Verzeichnisse angelegt, Starter Files liegen da wo sie hingehören.
Jetzt tritt aber folgender Fehler auf:

Code: Alles auswählen

[2007-03-22 00:08:47]: uid: (1001/tester) gid: (1001/1001) cmd: php-fcgi-tester
[2007-03-22 00:08:47]: cannot stat program: (php-fcgi-tester)
Dies passiert wenn ich in meiner vHost stehen habe:

Code: Alles auswählen

        SuexecUserGroup tester testgruppe
tester = 1001
testgruppe = 1001

Ausgabe von suexec2 -V

Code: Alles auswählen

 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"
Wenn ich meine vHost wie folgt abändere,

Code: Alles auswählen

#        SuexecUserGroup tester testgruppe
laufen die PHP Scripte. Allerdings dann wohl unter dem falschen User.

Habt Ihr ne Idee??

Gruß Mathtias

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 22.03.2007 15:30:04

Poste mal die Rechte mit "ls -la" von deinem fcgi-starter, dem verzeichnis, in dem der fcgi-starter liegt, und die Rechte von /var/www

SeeDyX
Beiträge: 19
Registriert: 08.12.2004 12:47:43

Beitrag von SeeDyX » 02.04.2007 12:08:21

Hi, ich versuch mich auch grade an dieser Problematik:)
Was ich irgendwie noch nicht so ganz verstehe oder überlesen habe:
Pawel hat geschrieben:

Code: Alles auswählen

/var/www/conf# ls -al
-r-xr-xr-x  1 wwwuser wwwuser 116 2006-06-21 12:25 php-fcgi-htdocs
-r-xr-xr-x  1 vhost-user1 wwwuser 118 2006-09-01 02:09 php-fcgi-vhost1
-r-xr-xr-x  1 vhost-user2 wwwuser 117 2006-08-18 15:13 php-fcgi-vhost2
Die Eigentümer der Datei muss immer der gleiche User sein, der auch in User und Group Direktive eingetragen wurde.

So sieht die php-fcgi-htdocs aus:

Code: Alles auswählen

#!/bin/sh
PHPRC="/etc/php4/htdocs"
export PHPRC
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
exec /usr/bin/php4-cgi
was steht denn eigneltich in den php-fcgi-vhost dateien drin? das selbe wie in der php-fcgi-htdocs? und ist es richtig das ich die nur brauche, weil suexec die dateien nur ausführt wenn sie dem benutzer gehören als den man suexec genannt hat?
Gruß,
SeeDyX

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 02.04.2007 18:04:38

Ich kenne zwar Pawels Conf nicht genau, aber ich vermute, in den anderen steht einfach das gleiche drin, evtl mit einer anderen PHPRC (Pfad zur php.ini)

Und ja, deine Vermutung ist richtig, die Dateien gibt es, weil die php-fcgi-starter immer dem mit suexec gesetzten User gehören müssen. Natürlich könntest du auch X-Mal das php-binary kopieren und entsprechend chmodden, aber das wäre sehr unschön. Außerdem kann man in den Dateien noch ein paar ENV-Vars konfigurieren (zB PHPRC).

Ich bin mir jetzt übrigens nicht mehr ganz sicher, aber ich glaube, dass nicht nur die Datei die richtigen Rechte haben muss, sondern auch das Verzeichnis, in dem die Datei liegt. Entsprechend kannst du nicht alle php-fcgi-starter in ein Verzeichnis legen, sondern musst jedes in ein eigenes Unterverzeichnis tun. Bin mir da aber wie gesagt nicht mehr ganz sicher und kann gerade nicht nachsehen.

Annex
Beiträge: 8
Registriert: 10.12.2006 18:03:46

Beitrag von Annex » 07.04.2007 04:54:28

Hallo Comunity

Ich hab mir jetzt auf meinem Etch Apache2.2 mit php5 über fastcgi und suexec installiert.
Funktioniert auch alles soweit ganz gut.

Was ich gern wissen würd:
Gibt es eine Möglichkeit die Anzahl der php-binarys fest vorzugeben/regulieren?
Dass man die binarys schön nicen kann gefällt mir, jedoch würd ich mir wünschen wenigstens einen Maximalanzahl an binarys vorgeben zu können.
Der Wert aus PHP_FCGI_CHILDREN wird ja nur zum starten verwendet, nicht jedoch als Grenzwert.

Annex
Beiträge: 8
Registriert: 10.12.2006 18:03:46

Beitrag von Annex » 07.04.2007 12:57:19

So langsam wird mir das etwas suspekt.
Ich kann kaum Dokumentationen über mod_fcgi finden.

Doch im Sourcecode von fcgi befinden sich ein paar nette defaults:
http://www.fastcgi.com/mod_fastcgi/mod_fastcgi.h

Wie etwa:
#define FCGI_DEFAULT_MAX_PROCS 50
/* maximum number of processes that
* are allowed to run on system */

#define FCGI_DEFAULT_MIN_PROCS 5
/* minimum number of processes that
* can be run without being killed
* off by the process manager */


Ob sich diese Einstellungen auch im mod-fcgi welches beim Apache2.2.3 dabei war befinden, weiß ich nicht.

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 07.04.2007 16:32:43

Docu zu fastcgi mit allen Parametern, die du brauchst:

http://www.fastcgi.com/mod_fastcgi/docs ... tCgiConfig

Vor allem interessant für dich:

Code: Alles auswählen

 -maxClassProcesses n (10)
    The maximum number of dynamic FastCGI application instances allowed to run for any one FastCGI application. It must be <= to -maxProcesses (this is not programmatically enforced). 
-maxProcesses n (50)
    The maximum total number of dynamic FastCGI application instances allowed to run at any one time. It must be >= to -maxClassProcesses (this is not programmatically enforced).
Du solltest aber bedenken, dass die damit eingestellten Prozesse immer * (MAL) PHP_FCGI_CHILDREN genommen werden, sprich -maxProcesses 2 bei 5 PHP_FCGI_CHILDREN wären 10+2 (2 parent) Prozesse. Ich empfehle dir, wenn du php >= 5.2 verwendest, PHP_FCGI_CHILDREN auf 0 zu setzen, dann hast du genau maxProcesses Prozesse bzw -maxClassProcesses pro vHost.

Annex
Beiträge: 8
Registriert: 10.12.2006 18:03:46

Beitrag von Annex » 07.04.2007 19:48:57

Ich verwende aber mod_fcgid und nicht mod_fastcgi.

Man bin ich heute blind.

Ok, meine Lösung für Fcgid:

In der fcgid.conf folgendes Hinzufügen:

Code: Alles auswählen

  MaxProcessCount 100
  DefaultMaxClassProcessCount 5
100 = maximale Anzahl an Binarys systemweit.
5 = maximale Anzahl an Binarys pro Klasse

Die Anzahl der Binarys ist jetzt pro Starterscript immer maximal PHP_FCGI_CHILDREN * DefaultMaxClassProcessCount

Fcgid Dokumentation:
http://fastcgi.coremail.cn/doc.htm

Waleb
Beiträge: 42
Registriert: 22.03.2005 18:02:13
Kontaktdaten:

Beitrag von Waleb » 10.04.2007 23:21:13

Hallo,

muss nochmal auf das Thema zurückkommen. Bin gerade am verzweifeln:

Habe das ganze genau so eingerichtet wie schonmal (siehe Seite 2-3 dieses Threats) aber nun spuckt er wieder den gleichen Fehler aus wie damals obwohl ich die Rechte diesmal richtig gesetzt habe (glaube ich, hab jedenfalls schon 100 verschiedene Konstellationen ausprobiert):

Fehler:

Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

error.log:

Code: Alles auswählen

[Tue Apr 10 22:56:43 2007] [notice] mod_fcgid: call /var/www/wwwroot/docroot/i.php with wrapper /var/www/wwwroot/php-fcgi-wwwroot
suexec policy violation: see suexec log for more details
[Tue Apr 10 22:56:43 2007] [notice] mod_fcgid: server /var/www/wwwroot/docroot/i.php(13926) started
[Tue Apr 10 22:56:43 2007] [warn] mod_fcgid: can't apply process slot for /var/www/wwwroot/docroot/i.php
[Tue Apr 10 22:56:46 2007] [notice] mod_fcgid: process /var/www/wwwroot/docroot/i.php(13926) exit(server exited), terminated by calling exit(), return code: 116
Ich habe dann als es mir zuviel wurde einfach allen Ordnern und Datein des V-Hosts 777 chmod und wwwroot (der Benutzer von SuExecUserGroup) als Besitzer gegeben. Ohne Erfolg.

V-Host:

Code: Alles auswählen

NameVirtualHost *
<VirtualHost *>
        SuExecUserGroup wwwroot wwwroot

        ServerAdmin admin@xxx.net

        DocumentRoot /var/www/wwwroot/docroot/
        AddHandler fcgid-script .php

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/wwwroot>
                FCGIWrapper /var/www/wwwroot/php-fcgi-wwwroot .php
                Options +Indexes FollowSymLinks MultiViews +ExecCGI
                AllowOverride None
                Order allow,deny
                allow from all
                # This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
                # RedirectMatch ^/$ /apache2-default/
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined
        ServerSignature Off

</VirtualHost>
Grüße
Waleb

Pawel
Beiträge: 284
Registriert: 27.11.2006 03:59:39

Beitrag von Pawel » 11.04.2007 08:57:19

Waleb hat geschrieben:

Code: Alles auswählen

suexec policy violation: see suexec log for more details
Was sagt die suexec.log zu deinen Problemen?
Waleb hat geschrieben:Ich habe dann als es mir zuviel wurde einfach allen Ordnern und Datein des V-Hosts 777 chmod und wwwroot (der Benutzer von SuExecUserGroup) als Besitzer gegeben. Ohne Erfolg.
SuExec hat explizite Einschränkungen bei den vergebenen Rechten, schau in die suexec.log und dort wird stehen, warum er die Ausführung verhindert hat.

Waleb
Beiträge: 42
Registriert: 22.03.2005 18:02:13
Kontaktdaten:

Beitrag von Waleb » 11.04.2007 18:43:36

suexec.log:

Code: Alles auswählen

[2007-04-11 18:42:23]: uid: (1001/wwwroot) gid: (1001/1001) cmd: php-fcgi-wwwroot
[2007-04-11 18:42:23]: target uid/gid (1001/1001) mismatch with directory (1001/33) or program (1001/1001)
Ich werd daraus nicht schlau.

Meine Rechte:

Code: Alles auswählen

server:/var/www# ls -l -R
.:
total 4
drwxr-x--- 3 wwwroot www-data 4096 2007-04-10 22:03 wwwroot

./wwwroot:
total 8
drwxr-x--- 2 wwwroot www-data 4096 2007-04-10 22:46 docroot
-rwxr----- 1 wwwroot wwwroot   121 2007-04-10 22:03 php-fcgi-wwwroot

./wwwroot/docroot:
total 8
-rwxr----- 1 wwwroot www-data  6 2007-04-10 22:46 index.html
-rwxr----- 1 wwwroot www-data 25 2007-04-10 22:46 i.php

Wo ist der Wurm drin
Zuletzt geändert von Waleb am 11.04.2007 19:22:42, insgesamt 1-mal geändert.

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 11.04.2007 19:08:27

Dein Verzeichnis

Code: Alles auswählen

/var/www/wwwroot
hat die Rechte wwwroot:www-data (1001,33), brauch aber, um von suexec korrekt ausgeführt zu werden, die Rechte wwwroot:wwwroot (1001/1001).

Code: Alles auswählen

chown wwwroot:wwwroot /var/www/wwwroot
Übrigens, allen Dateien 777 zu geben, ist von der Sicherheit her gesehen "oha", am besten du änderst das wieder. Deine Dateien in /var/www/docroot/* müssen wwwroot:www-data (1001,33) mit chmod 740 sein.

Code: Alles auswählen

chown -R wwwroot:www-data /var/www/docroot
chmod -R 740 /var/www/docroot
Vorsicht mit dem -R, also aufpassen, was du rekursiv alles machst, ich übernehme keine Garantie, dass die von mir geposteten Commandos funktionieren und das richtige tun :)

Antworten