Erfahrungen apache2 mit PHP 5 als FastCGI

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
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 :)

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

Beitrag von Waleb » 11.04.2007 19:20:48

Kase hat geschrieben: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
Wenn ich den Ordner wwwroot als Besitzer und Gruppe wwwroot gebe bekomme ich ein 403 Forbidden.

Die 777er Rechte habe ich nur gegeben um den Fehler einzugrenzen. Die aktuellen Rechte stehen in meinem letzten Post :).

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

Beitrag von Kase » 11.04.2007 19:45:37

Ah, sry, ich hätte dein vHost etwas genauer studieren sollen.

Du hast noch einen grundlegenden Denkfehler.

Dein Haupt-Verzechnis ist /var/www

Dort hast du 2 Unterverzeichnisse, eines, in dem deine php-fcgi-xxxx liegen (inkl pro User ein Unterverzeichnis) , und eines, in dem deine ganzen Docroots liegen.

Es könnte also im Endeffekt so aussehen:

Code: Alles auswählen

/var/www

/var/www/php-fcgi-files/user(zB wwwroot)/php-fcgi-wwwroot
(wobei php-fcgi-wwwroot deine php-fcgi-starter Datei ist)

/var/www/docroot/user(zB wwwroot)/*
(* steht für php/html/css/irgendwas Dateien, also die ganz normalen Web-Dateien)
Bei deiner momentanen Config hast du dein Docroot-Dir und dein php-fcgi-starter-Dir gemischt. Das kann natürlich von den Rechten nicht klappen, da deine php-starter USER:USER sein müssen, inkl dem Unterverzeichnis, deine "Web-Dateien und Verzeichnisse" aber (zumindest, wenn es keine php Scripte sind) mindestens READ für www-data haben müssen.

Deine Vorgehensweise könnte also in etwa so sein:

Code: Alles auswählen

# mkdir /var/www/php-fcgi-starter
# chown root:root /var/www/php-fcgi-starter
# mkdir /var/www/php-fcgi-starter/wwwroot
# chown wwwroot:wwwroot /var/www/php-fcgi-starter/wwwroot
# mv /var/www/wwwroot/php-fcgi-wwwroot /var/www/php-fcgi-starter/wwwroot
# chown wwwroot:wwwroot /var/www/php-fcgi-starter/wwwroot/php-fcgi-wwwroot
# chattr -V +i /var/www/php-fcgi-starter/wwwroot/php-fcgi-wwwroot

# mkdir /var/www/docroot
# mkdir /var/www/docroot/wwwroot
# mv HTMLUNDPHPFILES /var/www/docroot/wwwroot
# chown -R wwwroot:www-data /var/www/docroot/wwwroot
# chmod -R 740 /var/www/docroot/wwwroot
Außerdem folgende Zeile ändern:

Code: Alles auswählen

im vHost:
-DocumentRoot /var/www/wwwroot/docroot/
+DocumentRoot /var/www/docroot/wwwroot/

-<Directory /var/www/wwwroot>
+<Directory /var/www/docroot/wwwroot>

-FCGIWrapper /var/www/wwwroot/php-fcgi-wwwroot .php
+FCGIWrapper /var/www/php-fcgi-starter/wwwroot/php-fcgi-wwwroot .php
- steht immer für die Zeile, die raus soll, + für die neue Zeile.

Der Grundgedanke ist aber, dass du deine php-fcgi-starter-Script und deine Docroots komplett trennst, lediglich in /var/www müssen beide liegen, ansonsten dürfen die nichts mit einander zu tun haben.

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

Beitrag von Waleb » 11.04.2007 20:15:23

Danke für die ausführliche Antwort!

Ich hab das jetzt auch so gemacht. Nur ein Problem:

Welche Rechte gebe ich dem Ordner docroots in dem alle anderen docroots drin liegen?

Wenn ich ihm 770 gebe bekomme ich einen 403 Forbidden Fehler. Wenn ich ihm 777er gebe dann kommt wieder der missmatch Fehler.

Meine Aktuelle Rechteverteilung:

Code: Alles auswählen

server:/var/www# ls -l -R
.:
total 8
drwxr----- 3 root root 4096 2007-04-11 19:50 docroots
drwx------ 3 root root 4096 2007-04-11 19:52 php-fcgi-starter

./docroots:
total 4
drwxrwxrwx 2 wwwroot www-data 4096 2007-04-11 20:04 wwwroot

./docroots/wwwroot:
total 8
-rwxr----- 1 wwwroot www-data  6 2007-04-11 20:04 index.html
-rwxrwxrwx 1 wwwroot www-data 25 2007-04-11 19:57 i.php

./php-fcgi-starter:
total 4
drwx------ 2 wwwroot wwwroot 4096 2007-04-11 19:52 wwwroot

./php-fcgi-starter/wwwroot:
total 4
-rwx------ 1 wwwroot wwwroot 121 2007-04-11 19:52 php-fcgi-wwwroot

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

Beitrag von Kase » 11.04.2007 20:23:15

docroots kannst du www-data:www-data geben, da dort eigentich niemand außer dem Apache lesen sollte, und selbst dieser liest da eigentlich wenn nur auf ein Unterverzeichnis.

Code: Alles auswählen

chown www-data:www-data /var/www/docroots
chmod 740 /var/www/docroots
Der Missmatch Fehler sollte "eigentlich" nicht kommen, da Suexec mit dem Ordner /var/www/docroots überhaupt nichts zu tun hat, Suexec "kümmert" sich nur um den Ordner /var/www/php-fcgi-starter

PS: Du hast als Ordner docroots verwendet, in meinem Code habe ich docroot (ohne s) verwendet, nicht, dass es deswegen Schwierigkeiten gibt.

Falls doch wieder der Missmatch Fehler kommt, unbedingt die entsprechenden Einträge der error.log und suexec.log mitposten.

Edit:

drwxrwxrwx 2 wwwroot www-data 4096 2007-04-11 20:04 wwwroot

Das Verzeichnis docroots/wwwroot braucht übrigens keine 777 :) Kannst du in 740 ändern.

-rwxrwxrwx 1 wwwroot www-data 25 2007-04-11 19:57 i.php

Die i.php kann auch 740 sein :)

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

Beitrag von Waleb » 17.04.2007 11:01:36

Also, ich bekomm es einfach nicht hin und hab keine Ahnung woran es noch liegen könnte

hier die Ordner und Dateirechte:

Code: Alles auswählen

server:/var/www# ls -l -R
.:
total 8
drwxr----- 3 www-data www-data 4096 2007-04-11 19:50 docroots
drwx------ 3 root     root     4096 2007-04-11 19:52 php-fcgi-starter

./docroots:
total 4
drwxr-x--- 2 wwwroot www-data 4096 2007-04-11 20:04 wwwroot

./docroots/wwwroot:
total 8
-rwxr----- 1 wwwroot www-data  6 2007-04-11 20:04 index.html
-rwxr----- 1 wwwroot www-data 25 2007-04-11 19:57 i.php

./php-fcgi-starter:
total 4
drwx------ 2 wwwroot wwwroot 4096 2007-04-11 19:52 wwwroot

./php-fcgi-starter/wwwroot:
total 4
-rwx------ 1 wwwroot wwwroot 121 2007-04-11 19:52 php-fcgi-wwwroot
Hier die php-fcgi-wwwroot:

Code: Alles auswählen

#!/bin/sh
PHPRC="/etc/php5/cgi/php.ini"
export PHPRC
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
exec /usr/bin/php5-cgi
Hier der default virtualhost:

Code: Alles auswählen

NameVirtualHost *
<VirtualHost *>
        SuExecUserGroup wwwroot wwwroot

        ServerAdmin admin@xxx

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

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/docroots/wwwroot>
                FCGIWrapper /var/www/php-fcgi-starter/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>
Wäre nett wenn du noch mal drüber schaun könntest.

Cronet
Beiträge: 106
Registriert: 11.02.2003 22:58:17

Beitrag von Cronet » 19.04.2007 15:39:30

Ich hab leider genau das gleiche Problem...

Konfiguration ist entsprechend dem vorigem Post.

Bei jeder PHP Datei bekomme ich ein "403 Forbidden". Der Rest funktioniert...

Im Suexec log steht leider nichts. Auch im Error Log nicht, ausser der Hinweis dass der Suexec Mechanismus enabled ist. Aber das soll ja so sein...

Hat jemand nen Tipp für mich?

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

Beitrag von Kase » 20.04.2007 16:50:44

Verwendet ihr eine mod_fcgid Version < als 2.0? zB 1.10 von Debian Etch? Falls ja, dann macht mal folgendes:

Code: Alles auswählen

chmod --recursive 755 /var/www/php-fcgi-starter
Ich hatte nämlich bei der Konfiguration mit ETCH das gleiche Problem, da kam immer ein 403 Forbidden mit mod_fcgid v1.10, wobei die gleiche Konfiguration mit mod_fcgid v2.0 problemlos funktioniert hat.

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

Beitrag von Waleb » 20.04.2007 22:02:03

Code: Alles auswählen

Version: 1:1.10-2
Wie kann ich die auf die neuste Version updaten?

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

Beitrag von Kase » 20.04.2007 22:32:17

Sourcen runterladen und compilieren. Ist aber eigentlich nicht nötig, da die Version 1.10 auch funktionieren sollte. Was für ein Fehler kommt denn inzwischen?

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

Beitrag von Waleb » 20.04.2007 22:43:54

HA es läuft!

Keine Ahnung warum aber es läuft!

Hab viel mit den Rechten rumgespielt und glaube jetzt die minimal nötigen Rechte verteilt zu haben unter denen es noch läuft:

Code: Alles auswählen

server:/var/www# ls -l -R
.:
total 8
drwxr-x--x 3 www-data www-data 4096 2007-04-11 19:50 docroots
drwxr-xr-x 3 root     root     4096 2007-04-11 19:52 php-fcgi-starter

./docroots:
total 4
drwxr-x--- 2 wwwroot www-data 4096 2007-04-20 22:13 wwwroot

./docroots/wwwroot:
total 8
-rw-r----- 1 wwwroot www-data  6 2007-04-11 20:04 index.html
-rwxrw---- 1 wwwroot www-data 31 2007-04-20 22:13 i.php

./php-fcgi-starter:
total 4
drwx--x--x 2 wwwroot wwwroot 4096 2007-04-11 19:52 wwwroot

./php-fcgi-starter/wwwroot:
total 4
-rwx------ 1 wwwroot wwwroot 121 2007-04-11 19:52 php-fcgi-wwwroot
Was ich nicht verstehe ist warum php-fcgi-starter/wwwroot die Rechte 711 braucht.

Ansonsten glaub ich ist das so in Ordnung oder?

Cronet
Beiträge: 106
Registriert: 11.02.2003 22:58:17

Beitrag von Cronet » 20.04.2007 23:38:45

Braucht man unbedingt den Worker um fcgi benutzen zu können?

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

Beitrag von Kase » 21.04.2007 01:08:55

@Waleb:

Der Apache muss wohl irgendwie ins Verzeichnis wechseln, deshalb das +x. Ist aber bei der 2.0er Version von fcgid nicht mehr so.

Ansonsten sieht alles ok aus. Lediglich die i.php sollte keine Schreibrechte für www-data haben, ansonsten kann man die über den Apache evtl verändern.
Cronet hat geschrieben:Braucht man unbedingt den Worker um fcgi benutzen zu können?
Nein, das braucht man nicht, fcgi läuft auch mit dem mpm-prefork. Da aber mod_fcgid threadsafe ist, und mpm-worker ein ganzes Stück schneller als mpm-prefork ist, lohnt es sich, mpm-worker auch zu benutzen.

SethGecko
Beiträge: 1
Registriert: 26.04.2007 15:20:45

Beitrag von SethGecko » 26.04.2007 15:42:46

Hallo,
ich bekomm fcgid einfach nicht ans laufen. Momentan gehe ich davon aus das ich ein Rechteproblem habe. Aber hier erstmal meine config:

fcgid.conf:

Code: Alles auswählen

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  SocketPath /var/lib/apache2/fcgid/sock
  IPCConnectTimeout 20
</IfModule>
vhost:

Code: Alles auswählen

<VirtualHost *>
        ServerName bla.xy
        ServerAlias www.bla.xy

        SuExecUserGroup testuser ftpuser

        DocumentRoot /var/www/testuser/www.bla.xy/
        DirectoryIndex index.php index.html index.htm

        <Directory /var/www/testuser>
                FCGIWrapper /var/www/testuser/php5-fcgid .php
                AddHandler fcgid-script .php
                Options FollowSymLinks MultiViews +ExecCGI
                AllowOverride AuthConfig
                Order allow,deny
                allow from all
        </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 Off

        ErrorLog /var/log/apache2/error.log
</VirtualHost>
fcgid wrapper:

Code: Alles auswählen

# /var/www/testuser/php5-fcgid
#!/bin/sh
PHPRC="/etc/php5/cgi"
export PHPRC
PHP_FCGI_CHILDREN=8
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php5-cgi
Rechte in /var/www:

Code: Alles auswählen

XXXX:/var/www# ls -la
total 1
drwxr-xr-x  6 root       root       73 Apr 26 14:28 .
drwxr-xr-x 16 root       root     4096 Jun 28  2006 ..
drwxr-xr-x  4 testuser    ftpuser    69 Apr 26 13:18 testuser
Rechte in /var/www/testuser:

Code: Alles auswählen

XXXX:/var/www/testuser# ls -la
total 12
drwxr-xr-x  4 testuser ftpuser   69 Apr 26 13:18 .
drwxr-xr-x  6 root    root      73 Apr 26 14:28 ..
-r-xr-xr-x  1 testuser ftpuser  199 Apr 26 14:18 php5-fcgid
drwxr-xr-x 15 testuser ftpuser 4096 Apr 26 14:51 www.bla.xy
drwxr-xr-x 16 testuser ftpuser 4096 Apr 15 21:04 www.bla2.xy
Wenn ich nun eine PHP Datei aufrufe bekomm ich einen Internal Server Error. Folgendes erscheint dann in den Logs:

suexec.log:

Code: Alles auswählen

[2007-04-26 15:37:00]: uid: (1002/testuser) gid: (1000/1000) cmd: php5-fcgid
[2007-04-26 15:37:01]: uid: (1002/testuser) gid: (1000/1000) cmd: php5-fcgid
error.log:

Code: Alles auswählen

[Thu Apr 26 15:40:25 2007] [notice] mod_fcgid: call /var/www/testuser/www.bla.xy/index.php with wrapper /var/www/testuser/php5-fcgid
[Thu Apr 26 15:40:25 2007] [notice] mod_fcgid: server /var/www/testuser/www.bla.xy/index.php(7520) started
suexec failure: could not open log file
fopen: Permission denied
[Thu Apr 26 15:40:25 2007] [info] (104)Connection reset by peer: mod_fcgid: read data from fastcgi server error.
[Thu Apr 26 15:40:25 2007] [error] [client 217.227.103.204] Premature end of script headers: index.php
[Thu Apr 26 15:40:28 2007] [notice] mod_fcgid: process /var/www/testuser/www.bla.xy/offline.php(7520) exit(communication error), terminated by calling exit(), return code: 1
Ich weiss nicht weiter. Vielleicht sieht von euch jemand einen Fehler. Danke schonmal im Voraus.

Gruß
Dominic

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

Beitrag von Kase » 27.04.2007 14:11:26

Code: Alles auswählen

suexec failure: could not open log file
fopen: Permission denied 
Mach mal testweise ein

Code: Alles auswählen

chmod 776 /var/log/apache2/suexec.log

iface
Beiträge: 4
Registriert: 30.04.2007 21:00:55

Beitrag von iface » 30.04.2007 21:22:50

Hallo

ich verbringe jetzt schon mehrere Tage mit mod_fastcgi und mod_fcgid.
Mittlerweile habe ich mich auch durch die beiden wichtigen Foren durchgearbeitet.
Ansich bin ich ja auch ganz erfolgreich damit, ich hab nur einen großen Wunsch:
Ich möchte mod_fcgid mit mod_userdir koppeln und das fällt mir schwer.
Eine Idee hat ich bei mod_fastcgi da hab ich einfach die notwendige Action in die .htaccess des Users eingetragen und das fastcgi-starter-script ins public_html gelegt. Funktioniert eigentlich auch alles wunderbar, nur nun möchte ich gerne fcgid benutzen und da soll ich mit FCGIWapper das fastcgi-starter-script aufrufen.

Code: Alles auswählen

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit
                #Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                Options ExecCGI MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                FCGIWrapper /home/*/public_html/bin/php5-fcgid .php
                AddHandler fcgid-script .php
        </Directory>
Ich will nicht für jeden Nutzer eine FCGIWrapper Zeile schreiben müssen oder gar einen VHOST anlegen.
Die FCGIWrapper-Zeile funktioniert leider in der .htaccess der Nutzer nicht (mehr), war wohl ein Sicherheitsproblem. :twisted:

Nun meine Frage: Gibt es eine schöne Möglichkeit oder bin ich nur zu blind die Lösung zu sehen?!

Antworten