Erfahrungen apache2 mit PHP 5 als FastCGI

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 09.05.2007 21:35:01

Hallo nochmal,

ich hab zur Abwechslung mal eine Lösung für ein hier noch nicht geschildertes Problem (oder ich hab es überlesen :wink: ):
Nachdem ich meine VHosts alle erfolgreich umgezogen habe, habe ich ab und an einen "500 Internal Server Error" bekommen, in den logs war ein "premature end of script headers". Die Lösung habe ich hier gefunden (letzter Abschnitt):
http://www.felix-schwarz.name/Secure_PH ... cgid)_(en)

Gruß, Marc

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

Beitrag von Kase » 10.05.2007 08:52:26

Hallo,

wurde hier glaube ich noch nicht so direkt geschrieben.

Ich habe die Timeouts sogar noch ein ganzes Stück höher, Auszug aus meiner fcgid.conf:

Code: Alles auswählen

  # Lange IPCC Timeouts, damit es unter Last keine 500er gibt.
  IPCConnectTimeout 60
  IPCCommTimeout 120

mulix
Beiträge: 2
Registriert: 30.04.2007 09:56:31

Beitrag von mulix » 14.05.2007 17:26:55

Hi Leute...

ich komme mit der verbindung apach2 + php5-cgi + libapach2-mod-fcgid auch nicht wirklich weiter. Ich so einiges aus diesem beitrag abzuleiten aber ich bekomme immer ein error 500 vom apache zurück. Auch die suexec log sagt mir das hier was mit den rechten nicht stimmt ... target uid/gid mismatch with directory...

zur erklärung: www-data ist der apache user bzw. seine gruppe und mschumann ist der vhost user bzw. seine gruppe

die softwareversionen sind debian stable (etch) alles per apt-get install

hier meine conf´s und log´s

vhost

Code: Alles auswählen

<VirtualHost 192.168.3.150:80>
   SuExecUserGroup mschumann mschumann
   ServerName webtest.local.fab9.net
   DocumentRoot /var/www/webtest.local.fab9.net/
   AddHandler fcgid-script .php
      <Directory /var/www/webtest.local.fab9.net>
         FCGIWrapper /var/www/php-fcgi-scripts/php-fcgi-webtest.local.fab9.net .php
         Options FollowSymLinks MultiViews +ExecCGI
         AllowOverride None
         Order allow,deny
         allow from all
      </Directory>
   ErrorLog /var/log/apache2/error.log
   LogLevel warn
   CustomLog /var/log/apache2/access.log combined
   ServerSignature Off
</VirtualHost>
php-fcgi-htdocs

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
php-fcgi-webtest.local.fab9.net

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
fcgid.conf

Code: Alles auswählen

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  SocketPath /var/lib/apache2/fcgid/sock
  IPCConnectTimeout 20
</IfModule>
verzeichnisse (ich denke hier ist der hase begraben)

Code: Alles auswählen

/var:
drwxrwxrwx 2 www-data  www-data 4096 2007-05-13 22:29 www

/var/www:
drwxr-xr-x 2 www-data  www-data 4096 2007-05-13 22:29 php-fcgi-scripts
drwxr-x--- 2 mschumann www-data 4096 2007-05-13 22:14 webtest.local.fab9.net

/var/www/php-fcgi-scripts:
-rw-r--r-- 1 www-data  www-data 126 2007-05-13 22:29 php-fcgi-htdocs
-rw-r--r-- 1 mschumann www-data 126 2007-05-13 15:27 php-fcgi-webtest.local.fab9.net

/var/www/webtest.local.fab9.net:
-rwxr----- 1 mschumann www-data 30 2007-05-13 15:42 index.php
-rwxr----- 1 mschumann www-data 16 2007-05-13 22:14 test.html
suexec.log

Code: Alles auswählen

[2007-05-14 17:59:42]: uid: (1000/mschumann) gid: (1000/1000) cmd: php-fcgi-webtest.local.fab9.net
[2007-05-14 17:59:42]: target uid/gid (1000/1000) mismatch with directory (33/33) or program (1000/33)
so long.. mulix

marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 14.05.2007 17:56:18

mulix hat geschrieben:
/var/www/php-fcgi-scripts:
-rw-r--r-- 1 www-data www-data 126 2007-05-13 22:29 php-fcgi-htdocs
-rw-r--r-- 1 mschumann www-data 126 2007-05-13 15:27 php-fcgi-webtest.local.fab9.net
Das php-fcgi-webtest.local.fab9.net script muß glaube ich auch der Gruppe mschumann gehören und ausführbar sein. Falls das nicht reicht, erstelle unter /var/www/php-fcgi-scripts auch ein Unterverzeichnis, welches mschumann gehört (User + Gruppe), und verschiebe das Script dahin. Dementsprechend den Pfad dann im Virtual Host anpassen.
Viel Glück!

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

Beitrag von Kase » 14.05.2007 18:50:56

Das Unterverzeichnis wird benötigt!

Code: Alles auswählen

chown root:root /var/www/php-fcgi-scripts
mkdir /var/www/php-fcgi-scripts/mschumann
chown mschumann:mschumann /var/www/php-fcgi-scripts/mschumann
chmod 755 /var/www/php-fcgi-scripts/mschumann
mv /var/www/php-fcgi-scripts/webtest.local.fab9.net /var/www/php-fcgi-scripts/mschumann/
chown mschumann:mschumann /var/www/php-fcgi-scripts/mschumann/webtest.local.fab9.net
chmod 755 /var/www/php-fcgi-scripts/mschumann/webtest.local.fab9.net

mulix
Beiträge: 2
Registriert: 30.04.2007 09:56:31

Beitrag von mulix » 14.05.2007 18:53:18

Hi marc76

WOW :D es lebt.... dank dir.

danke auch an kase für die richtigstellung der chmod´s, ich schrieb noch da hattest du schon dein post draussen - muss ich noch umsetzen

ich musste nur unter /var/www/php-fcgi-scripts ein verzeichniss erstellen mit rechten des vhost-users, dan die php-fcgi datei dorthin kopieren (apache vhost anpassen) und es lief. cool

also so schaut das jetzte aus

Code: Alles auswählen

/var: 
drwxrwxrwx 2 www-data  www-data 4096 2007-05-13 22:29 www 

/var/www: 
drwxr-xr-x 2 www-data  www-data 4096 2007-05-13 22:29 php-fcgi-scripts 
drwxr-x--- 2 mschumann www-data 4096 2007-05-13 22:14 webtest.local.fab9.net 

/var/www/php-fcgi-scripts: 
-rw-r--r-- 1 www-data  www-data 126 2007-05-13 22:29 php-fcgi-htdocs 
drwxr-x-r-x 2 mschumann mschumann 4096 2007-05-13 22:14 webtest.local.fab9.net

/var/www/php-fcgi-scripts/webtest.local.fab9.net:: 
-rwxr-xr-x 1 mschumann mschumann 126 2007-05-13 15:27 php-fcgi-webtest.local.fab9.net 

/var/www/webtest.local.fab9.net: 
-rwxr----- 1 mschumann www-data 30 2007-05-13 15:42 index.php 
-rwxr----- 1 mschumann www-data 16 2007-05-13 22:14 test.html
im großen und ganzen sollte es das sein... evtl. noch ein paar rechte anpassen - muss man sich durch den kopf gehen lassen

so long... mulix

rootsvr
Beiträge: 2
Registriert: 27.06.2007 21:34:21

Beitrag von rootsvr » 27.06.2007 22:40:27

Ich hab irgendwie ein Brett vorm Kopf:
Ich habe (dachte ich) die richtigen Sachen eingebaut, aber nur Probleme.. die html Dateien gehen noch, php geht auf einer Domain.. auf der https domain (anderer Content) nicht..

geht:

Code: Alles auswählen

<VirtualHost *>
        ServerAdmin xyz@test.biz
        ServerName testserver.test.biz
        ServerAlias www.testserver.test.biz
        DocumentRoot /var/www/test.biz/docs
        SuExecUserGroup test_biz test_biz

       <Directory />
            Options -All +FollowSymLinks
            AllowOverride None
       </Directory>
        <Directory /var/www/test.biz/>
           Options -All +FollowSymlinks +ExecCGI
           AllowOverride AuthConfig
           Order allow,deny
           allow from all
           # FCGID-PHP-Teil
           FCGIWrapper /var/www/php-fcgi-scripts/test.biz/php-fcgi-starter .php
           AddHandler fcgid-script .php
        </Directory>
        ErrorLog  /var/www/test.biz/logs/error.log

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

        CustomLog /var/www/test.biz/logs/access.log combined
        ServerSignature On

</VirtualHost>

Geht nicht:

Code: Alles auswählen

<VirtualHost IP.IP.IP.IP:443>
  ServerName testserver.test.biz
  DocumentRoot /var/www/https_test.biz/docs
  ServerAdmin xyz@test.biz
  SuExecUserGroup https_test_biz https_test_biz
  # SSL
  SSLCertificateFile    /etc/httpd/ssl/serverbiz.crt
  SSLCertificateKeyFile /etc/httpd/ssl/serverbiz.key
  SSLEngine On
  SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:
  SetEnvIf User-Agent ".*MSIE.*" \
  nokeepalive ssl-unclean-shutdown \
  downgrade-1.0 force-response-1.0


<Directory />
       Options -All +FollowSymLinks
         AllowOverride None
       </Directory>
<Directory /var/www/https_test.biz>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    # FCGID-PHP-Teil
     FCGIWrapper /var/www/php-fcgi-scripts/https_test.biz/php-fcgi-starter .php
     AddHandler fcgid-script .php
</Directory>

  ErrorLog  /var/www/https_test.biz/logs/error.log
  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  CustomLog /var/www/https_test.biz/logs/access.log combined
</VirtualHost>
html Dateien gehen im https vhost
php nicht..
rufe ich eine Datein auf kommt

Code: Alles auswählen

Forbidden

You don't have permission to access /app_1/index.php on this server.
Im log:
[Wed Jun 27 22:37:18 2007] [error] [client IS.MY.OWN.IP] Attempt to serve directory: /var/www/https_test.biz/docs/

Suexec.log ist leer...

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

Beitrag von SeeDyX » 27.06.2007 23:03:57

Beim schnellen drüberschauen würd ich sagen dir fehlt im ssl-vhost die ExecCgi option.....

nebenbei: "Options -All +FollowSymlinks +ExecCGI" ist identisch zu "Options FollowSymlinks ExecCGI" und letzteres finde ich einfacher lesbar ;) (siehe auch http://buecher.lingoworld.de/apache2/showdir.php?id=632 )
Gruß,
SeeDyX

rootsvr
Beiträge: 2
Registriert: 27.06.2007 21:34:21

Beitrag von rootsvr » 27.06.2007 23:12:34

Du bist mein Held.. wie gesagt Brett vor Kopf!

Danke!

floogy
Beiträge: 107
Registriert: 19.04.2006 22:43:15

Beitrag von floogy » 24.10.2007 18:01:25

Hallo,

Ich hoffe Ihr könnt helfen das zu klären, ich nutze mod_fastcgi und suexec, in der vHost steht

Code: Alles auswählen

   <VirtualHost 172.16.240.1:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/gallery2

        ServerName www.mygallery2.home
        ServerAlias www.mygallery2.home
        
        DirectoryIndex index.php index.html index.htm
        SuexecUserGroup www-fcgi www-fcgi

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/gallery2>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
                <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews -Indexes +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>


        ErrorLog /var/log/apache2/www.mygallery2.home-error.log

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

        CustomLog /var/log/apache2/www.mygallery2.home-access.log combined
        ServerSignature On

</VirtualHost>


Sowohl mit Symlinks, oder als DocRoot im vHost erhalte ich folgende Fehler:

Code: Alles auswählen

SoftException in Application.cpp:199: Script "/usr/share/gallery2/index.php" resolving to "/usr/share/gallery2/index.php" not within configured docroot

Code: Alles auswählen

[Wed Oct 24 17:50:49 2007] [error] [client 172.16.240.1] SoftException in Application.cpp:199: Script "/var/www/gallery2/index.php" resolving to "/usr/share/gallery2/index.php" not within configured docroot
Wenn man sich mal dpkg -L gallery2 ansieht, ist leicht zu erkennen, dass es nicht unter /var/www installiert wird.
Das selbe gilt ja leider für phpadmin.
Wie kann man das lösen, ohne auf das debian-Paketsystem zu verzichten?



--with-suexec-docroot ist /var/www

Code: Alles auswählen

$ sudo /usr/lib/apache2/suexec2 -V
 -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"

marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 24.10.2007 18:20:08

ich habe mit symlinks, die nach außerhalb von /var/www zeigen, keine probleme...
suexec -V gibt die gleiche Ausgabe wie bei dir
in der vhost konfig ist documentroot dann z.b. /var/www/symlink/html

floogy
Beiträge: 107
Registriert: 19.04.2006 22:43:15

Beitrag von floogy » 24.10.2007 19:42:45

Danke marc,

wie finde ich nun den Fehler? Ich bin da ziemlich ratlos, poste aber gerne noch mehr logs oder details.

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

Beitrag von SeeDyX » 24.10.2007 20:19:57

Was für Wrapper Scripte hast du?
Ich kann grad mit dem Application.cpp nciht wirklich was anfangen

Ansonsten, hast du dir diesen kompletten Thread mal durchgelesen(Alle Seiten - ich weiß ist ziemlich viel inzwischen, aber ich hab das damals mehrmals gemacht, hat geholfen :))? da steht ne ganze menge drin..... Vorallem so zum generellen Aufbau.

Wenn ich mich noch richtig erinnere muss das Binary/Script das eigentlich ausgeführt wird unter /var/www liegen. Was das Script dann macht ist allerdings egal, das kann dann auch dinge außerhalb von /var/www aufrufen (genau dafür sind die PHP-Wrapper Scripte da, die rufen das php binary auf, das ja außerhalb von /var/www liegt, welches dann wiederum php Seiten aufruft die auch irgendow liegen können)
Gruß,
SeeDyX

floogy
Beiträge: 107
Registriert: 19.04.2006 22:43:15

Beitrag von floogy » 24.10.2007 21:10:28

In diesem thread ist die Konstellation näher beschrieben:
http://www.rootforum.de/forum/viewtopic.php?p=295108

Code: Alles auswählen

var
`--www
   |--php-fcgi-scripts
   |   |-- index.html
   |   |-- mypages.home
   |   |   |-- index.html
   |   |   `-- php-fcgi-starter
   |   `-- www.gallery2.home
   |       |-- index.html
   |       `-- php-fcgi-starter
   |--mypages.home
   |   |-- conf
   |   `-- web
   |       `-- index.php
   `--www.gallery2.home
      |-- conf
      `-- web
           `-- index.php
/etc/apache2/mods-available/fastcgi.conf:

Code: Alles auswählen

#http://archiv.debianhowto.de/de/apache2-phpfcgi-sarge/c_apache2-phpfcgi-sarge.html
<IfModule mod_fastcgi.c>
  AddHandler fastcgi-script .fcgi .php
  FastCgiWrapper /usr/lib/apache2/suexec2
  FastCgiIpcDir /var/lib/apache2/fastcgi
  FastCgiServer /var/www/php-fcgi-scripts/mypages.home/php-fcgi-starter -user floogy -group www-fcgi
<Location /cgi-bin/php-fcgi-starter>
        SetHandler fastcgi-script
        Options +ExecCGI
</Location>

Action php-fastcgi /cgi-bin/php-fcgi-starter

AddType application/x-httpd-php .php
Inzwischen ist auch -user floogy durch www-fcgi ersetzt, -user VHOST (z.B. mypages.home) wäre wahrscheinlich optimal.

Code: Alles auswählen

$ cat  /var/www/php-fcgi-scripts/mypages.home/php-fcgi-starter
#!/bin/sh
PHPRC="/var/www/mypages.home/conf"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
#exec /PATH/TO/PHP-BINARY/php-fcgi
exec /usr/bin/php5-cgi

Code: Alles auswählen

$ /usr/bin/php5-cgi -v
PHP 5.2.3-1ubuntu6 (cgi-fcgi) (built: Oct  5 2007 01:15:27)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

floogy
Beiträge: 107
Registriert: 19.04.2006 22:43:15

Beitrag von floogy » 25.10.2007 15:20:36

SeeDyX hat geschrieben:Wenn ich mich noch richtig erinnere muss das Binary/Script das eigentlich ausgeführt wird unter /var/www liegen. Was das Script dann macht ist allerdings egal, das kann dann auch dinge außerhalb von /var/www aufrufen (genau dafür sind die PHP-Wrapper Scripte da, die rufen das php binary auf, das ja außerhalb von /var/www liegt, welches dann wiederum php Seiten aufruft die auch irgendow liegen können)
Wie ich das sehe hast Du suexec selbst kompiliert, und für andere Dateisysteme und Pfade den Benutzercheck entfernt?
http://debianhowto.de/doku.php/de:howto ... ec_binarys
Die Richtigkeit dieses Zusatzes kann ich hier nicht bestaätigen:

Code: Alles auswählen

Edit: Ein Symlink /var/www auf ein ggf. anderes DocumentRoot hilft auch, ohne dass man das suexec neu bauen muss.
Ich sehe aber wohl, dass ich mich mit der Materie, und den beiden großen threads, hier und im rootforum noch tiefer beschäftigen muß.

Antworten