# lighttpd -> Probleme mit PHP

## Hilefoks

Moin,

ich bin durch einen Post hier im Forum auf die Idee gekommen meinen Apache-Server durch den lighttpd zu ersetzten...

Bis jetzt muss ich sagen ein echt geiles stück Software, aber leider habe ich Probleme mit PHP.

Wenn ich ein PHP-Script ausführen möchte (echo "Hallo"; z.B.) dann bekomme ich im Browser diese Fehlermeldung:

```
No input file specified.
```

Eine HTML-Datei verarbeitet er natürlich ohne Probleme. Leider steht aber nichts im Log-File.

Meine Konfiguration ist diese

```

# lighttpd Konfiguration

#--------------------------

# Module

server.modules       = ("mod_access", "mod_fastcgi", "mod_accesslog" )

# Binde an Netzwerkadresse und gib dem Kind einen Namen

server.bind          = "192.168.0.99"

server.name          = "devel.home.netz"

# chroot zu diesem Verzeichnis

server.chroot        = "/share/www/"

# Document-Root des Servers

server.document-root = "/devel.home.netz/"

## Fehler in dieses Log schreiben

server.errorlog      = "devel_error.log"

# Log File fuer die Zugriffe (vom chroot aus)

accesslog.filename   = "devel_access.log"

# PID-File

server.pid-file      = "/var/log/lighttpd/devel.pid"

# Index-Dateien

server.indexfiles  = ( "index.php",  "index.htm", index.html")

# deny-Regeln fuer bestimmte Dateien (Dateiendungen)

url.access-deny      = ( "~", ".inc" )

# Wechsel Benutzer und Gruppe

server.username    = "apache"

server.groupname  = "apache"

# fastcgi Modul (fuer PHP)

fastcgi.server       = (".php"=>("localhost"=>("host"=>"127.0.0.1","port"=>1026)))

# Mimetype mapping

mimetype.assign      = (

 ".pdf" => "application/pdf",

... und so weiter ...

 ".wmv" => "vdeio/x-ms-wmv"

)

```

btw: Wie ist die Config? Was kann ich besser machen? Es sollen mehrere Server gestartet werden (auf anderen IP's) die aber alle im gleichen chroot laufen. Ist das okay?

Vielen Dank

Hilefoks

----------

## moe

Läuft spawn-fcgi?

Gruss Maurice

----------

## Hilefoks

Ja läuft. 

/etc/conf.d/spawn-fcgi.conf

```

# Copyright 1999-2004 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/net-www/spawn-fcgi/files/spawn-fcgi-1.1.0.conf,v 1.2

# Configuration file for the FCGI-Part of /etc/init.d/lighttpd

## Set this to "yes" to enable SPAWNFCGI

ENABLE_SPAWNFCGI="yes"

## ABSOLUTE path to the spawn-fcgi binary

SPAWNFCGI="/usr/sbin/spawn-fcgi"

## ABSOLUTE path to the PHP binary

FCGIPROGRAM="/usr/bin/php-cgi"

## bind to tcp-port on localhost

FCGIPORT="1026"

## number of PHP childs to spawn

PHP_FCGI_CHILDREN=5

## number of request server by a single php-process until is will be restarted

PHP_FCGI_MAX_REQUESTS=1000

## IP adresses where PHP should access server connections from

FCGI_WEB_SERVER_ADDRS="127.0.0.1"

# allowed environment variables sperated by spaces

ALLOWED_ENV="PATH USER"

# do NOT change line below

ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"

## if this script is run as root switch to the following user

USERID=lighttpd

GROUID=nogroup

```

----------

## Hilefoks

Ich habe in diesem "Handbuch" http://www.incremental.de/products/lighttpd/download/handbook.pdf noch gefunden das display_errors=off und log_errors=on sein soll. Nun, das hatte ich zwar noch nicht gemacht, aber helfen tut's auch nicht. 

 :Crying or Very sad: 

----------

## friedegott

hm vielleicht koennte durch den umstand, dass lighttpd in chroot laeuft und spawn-fcgi nicht, ursache dafuer sein. ich hab das grade bei mir ausprobiert, und komme zu dem gleichen fehler wie du. also muss der lighttpd aus dem chroot raus oder spawn-fcgi in einen entsprechenden chroot....

----------

## Hilefoks

mh, das ist dumm!

Okay, wie bekomme ich den spawn-fcgi bzw php in das chroot?

Aber danke erst mal für deine Antwort, damit kann ich mir zumindest den devel-Server wieder starten.

EDIT: Habe zwar jetzt keinen chroot mehr in der Config, aber der Fehler ist immer noch da   :Crying or Very sad: 

EDIT2: Ich glaube ich hatte nicht erwähnt das ich PHP in der Version 5 einsetzte, könnte es daran liegen?   :Rolling Eyes: 

----------

## Laureen

Hallo,

ich nutze auch einen Apache Webserver.

Aber das was ich hier und im Forum über lighttpd gelesen haben macht mich neugierig. Hast du noch ein paar Informationen/Links die ich nicht über Google finden kann?

Danke

Laureen

----------

## Hilefoks

 *Laureen wrote:*   

> Hallo,
> 
> ich nutze auch einen Apache Webserver.
> 
> Aber das was ich hier und im Forum über lighttpd gelesen haben macht mich neugierig. Hast du noch ein paar Informationen/Links die ich nicht über Google finden kann?
> ...

 

Nein, leider habe ich alle Informationen auch über google gefunden. Allerdings gibt es leider nicht wirklich viel zu diesem Server. 

Auch mein Problem mit PHP besteht weiterhin.  :Sad: 

Aber grundsätzlich ist die Konfiguration sehr einfach und auch gut (auf englisch) beschrieben. Du wirst sie sicher schon gefunden haben, aber dennoch hier der Link http://www.lighttpd.net/documentation/.

LG Hilefoks

----------

## Hilefoks

So ich gebe auf!

Habe vieles probiert, neues Ebuild für PHP erstellt, Config's 100mal geändert, php.ini durchsucht... keine Ahnung wo der Fehler ist.

Aber ich habe meine config's mal hier hochgeladen:

http://fiasco.happynet.de/lighttpd/configs.tar.gz

In dem Archiv sollten alle wichtigen Dateien enthalten sein ebenso wie eine HTML-Seite mit der aktuellen Ausgabe von phpinfo();.

Wenn also jemand noch eine Idee hat - ich wäre richtig dankbar!

Tschau

Hilefoks

----------

## friedegott

hm merkwuerdig, ich benutze auch PHP 5 und bei mir lief das sofort mit standard configs... aber du hattest erwaehnt, dass der server dann wieder lief und jetzt wohl doch nicht? oder laeuft er nur im chroot nicht?

----------

## Hilefoks

Nein, der Server läuft mit PHP garnicht! 

Es werden vom Server (immer schon) alle HTML-Dokumente sauber verarbeitet, allerdings bekomme ich immer (und egal wo ich rumgespielt habe) die Fehlermeldung 

```
No input file specified.
```

 vom PHP-Interpreter. 

Also, ich denke das die Fehlermeldung vom PHP-CGI Interpreter generiert wird. 

Inzwischen habe ich aber sowohl lighttpd, spawn-fcgi als auch php-cgi mehrmals neu kompiliert. 

Wie gesagt, ich habe inzwischen keine Idee mehr woran es liegen könnte. Und dabei ist der Fehler bestimmt so simple....

ich könnt   :Crying or Very sad: 

EDIT: Ach zum chroot: Ich habe es sowohl mit als auch ohne versucht, aber beides liefert dies Fehlermeldung.  Im Moment habe ich das chroot deaktiviert und der Server läuft auch als root, nur um erstmal alle möglichen Fehlerquellen gering zu halten  :Wink: 

----------

## andreask

Hallo!

Hast Du http://www.lighttpd.net/documentation/fastcgi.html#preparing-php-as-a-fastcgi-program gelesen? 

Also entsprechend 

```
$ ./configure \

  --enable-fastcgi \

  --enable-discard-path \

  --enable-force-cgi-redirect \
```

verwendet? Bei meinen Gentoo PHP-Versionen wird das nicht gemacht. 

Wenn Du in der php.ini  log_errors=on eingestellt hast, hast Du auch per "error_log" Direktive eine Datei angegeben, in die PHP schreiben darf? 

chroot ist IMHO eigentlich ziemlich egal, da lighttpd und PHP per Socket kommunizieren. spawn-fcgi wird nur dazu verwendet PHP-Prozesse mit entsprechenden Vorgaben zu starten. 

hast Du denn wenn Du spawn-fcgi startest auch ein paar PHP-Prozesse im System laufen? Stimmen hier die Rechte?

Uns sonst mal hier probieren: http://wiki.lighttpd.net/7.html#A2

lighttpd ist wirklich eine feine Sache, stelle demnächst auch auf lighttpd um.

----------

## Hilefoks

Vielen Dank an alle für eure Antworten!

Das Problem ist fast gelöst!

Ich habe die ganze Zeit /etc/init.d/spawn-fcgi start ausgeführt und mit ps aux dann auch die PHP-Prozesse zu sehen bekommen...

Allerdings habe ich jetzt (ja, jetzt erst) den spawn-fcgi mal von Hand gestartet mit:

```
spawn-fcgi -p 1026 -f /usr/bin/php-cgi -C 5
```

 und siehe da -> Es geht.   :Laughing: 

Aber warum will er nicht wenn ich ihn mit dem init-Script starte?

Sorry, aber ich sehe gerade den Wald vor lauter Bäumen nicht.   :Embarassed: 

Ich gestehe: me <- n00b

Hier mal meine /etc/conf.d/spawn-fcgi.conf

```
# Copyright 1999-2004 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/net-www/spawn-fcgi/files/spawn-fcgi-1.1.0.conf,v 1.2 2004/09/28 01:44:05 swegener Exp $

# Configuration file for the FCGI-Part of /etc/init.d/lighttpd

## Set this to "yes" to enable SPAWNFCGI

ENABLE_SPAWNFCGI="yes"

## ABSOLUTE path to the spawn-fcgi binary

SPAWNFCGI="/usr/sbin/spawn-fcgi"

## ABSOLUTE path to the PHP binary

FCGIPROGRAM="/usr/bin/php-cgi"

## bind to tcp-port on localhost

FCGIPORT="1026"

## number of PHP childs to spawn

PHP_FCGI_CHILDREN=5

## number of request server by a single php-process until is will be restarted

PHP_FCGI_MAX_REQUESTS=1000

## IP adresses where PHP should access server connections from

FCGI_WEB_SERVER_ADDRS="127.0.0.1"

# allowed environment variables sperated by spaces

ALLOWED_ENV="PATH USER"

# do NOT change line below

ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"

## if this script is run as root switch to the following user

USERID=lighttpd

GROUPID=nogroup

```

Vielen Dank 

Hilefoks

@andreask: Ja, ich habe mir ein eBuild in Portage-Overlay erstellt das diese Konfigurationen vornimmt, - phpinfo() bestätigt mir das auch.

----------

## andreask

Wenn Du das init-script verwendest - unter welchem User/Group laufen dann die PHP-Prozesse? Verwendest Du bewußt einen anderen User für die PHP-Prozesse gegenüber dem lighttpd selber? Unter welchem User hast Du spawn-fcgi manuell gestartet?   

Hast Du mal in die error_log Datei die PHP erzeugt geguckt?

----------

## andreask

 *Laureen wrote:*   

>  Hast du noch ein paar Informationen/Links die ich nicht über Google finden kann?

 

Ein paar Links:

http://www.incremental.de/talks/

http://caching.ulf-wendel.de/

http://www.lighttpd.net/benchmark/

http://blog.thinkphp.de/archives/10-The-switch-from-Java-to-PHP.html

http://wiki.lighttpd.net/9.html

http://talks.php.net/show/acc_php/13

http://thread.gmane.org/gmane.comp.web.lighttpd/626

----------

## Hilefoks

oh, oh - wie dumm von mir... 

Okay, es waren die Benutzerrechte .... habe lighttpd nun auch User:lighttpd und Gruppe: nogroup gesetzt und es läuft!  :Embarassed: 

Danke euch!

Hilefoks

----------

## friedegott

 *andreask wrote:*   

> 
> 
> chroot ist IMHO eigentlich ziemlich egal, da lighttpd und PHP per Socket kommunizieren. 

 

Prinzipiell magst du recht haben, aber der jeweilige Script Name wird dem als FastCGI Server laufendem php-cgi bei jedem Request in Form einer bestimmten Variable (eben ueber diese Sockets) uebermittelt. Und wenn lighttpd mit einem anderen root Verzeichnis als php-cgi laeuft, kann es doch zu Konflikten kommen. . .

----------

## andreask

Sollte ein Webserver eigentlich keine eigene Gruppe haben? Also im ebuild an Stelle von

```
        enewuser lighttpd /bin/false "${LIGHTTPD_DIR}" nofiles
```

evtl. dies: 

```
        enewgroup lighttpd

        enewuser lighttpd -1 /bin/false "${LIGHTTPD_DIR}" lighttpd
```

? Also prinzipiell so wie beim Apache.

----------

## Hilefoks

 *friedegott wrote:*   

>  *andreask wrote:*   
> 
> chroot ist IMHO eigentlich ziemlich egal, da lighttpd und PHP per Socket kommunizieren.  
> 
> Prinzipiell magst du recht haben, aber der jeweilige Script Name wird dem als FastCGI Server laufendem php-cgi bei jedem Request in Form einer bestimmten Variable (eben ueber diese Sockets) uebermittelt. Und wenn lighttpd mit einem anderen root Verzeichnis als php-cgi laeuft, kann es doch zu Konflikten kommen. . .

 

Ja, und da ist das Problem mit dem chroot, - mein Server läuft aber eben nicht wenn ich ein chroot konfiguriere. Aber das ist IMHO nicht so wichtig.

 *andreask wrote:*   

> Sollte ein Webserver eigentlich keine eigene Gruppe haben? Also im ebuild an Stelle von
> 
> ```
>         enewuser lighttpd /bin/false "${LIGHTTPD_DIR}" nofiles
> ```
> ...

 

Ja, denke schon. Aber ich kann beim spawn-fcgi die rechte in der Config nicht ändern (ändern kann ich sie, aber er startet dann nicht mehr).

Nun ja - erst mal läuft er so wie ich es möchte.

Nochmals Danke

Hilefoks

----------

## andreask

 *Hilefoks wrote:*   

> Ja, und da ist das Problem mit dem chroot, - mein Server läuft aber eben nicht wenn ich ein chroot konfiguriere. Aber das ist IMHO nicht so wichtig.

 

Aber es wäre doch gut wenn man klären könnte wie das funktioniert. Wenn Du sonst nicht weiter kommst einfach mal im IRC oder auf der Mailingliste nachfragen: http://wiki.lighttpd.net/7.html#A2

 *Hilefoks wrote:*   

>  *andreask wrote:*   Sollte ein Webserver eigentlich keine eigene Gruppe haben? Also im ebuild an Stelle von
> 
> ```
>         enewuser lighttpd /bin/false "${LIGHTTPD_DIR}" nofiles
> ```
> ...

 

Ja, weil diese Gruppe ja nicht existiert, müsstest Du manuell anlegen, oder man müsste das ebuild etwa so anpassen wie von mir beschrieben.

----------

## Hilefoks

 *andreask wrote:*   

> Ja, weil diese Gruppe ja nicht existiert, müsstest Du manuell anlegen, oder man müsste das ebuild etwa so anpassen wie von mir beschrieben.

 

Nein, daran liegt es nicht. Nachdem ich bemerkt hatte das es die Userrechte sind wollte ich zunächst in spawn-fcgi die Rechte ändern (auf apache, apache unter der auch lighttpd lief), das funktioniert aber nicht.

----------

## andreask

Also bei mir geht das ganz ohne Probleme. Ich hab jetzt den lighttpd unter lighttpd:lighttpd laufen, und php-cgi unter apache:apache. So brauche ich erstmal nichts an meinen Rechten ändern.  Außerdem gefällt mir die Trennung von webserver-Prozess und php-Prozessen sehr gut. Z.B. kann man dann auch nicht mit PHP in die Log-Dateien schreiben...

Ich hab mal auf Basis dieses Bugs https://bugs.gentoo.org/show_bug.cgi?id=76575 ein ebuild erstellt. Ich habe auch spawn-fcgi in das lighttpd-ebuild aufgenommen, weil es mit lighttpd 1.3.6 ja auch in die Standarddistribution aufgenommen wurde. 

Siehe auch: https://forums.gentoo.org/viewtopic.php?p=1951363#1951363 für mein ebuild.

Einige Probleme habe ich allerdings noch:

1. PHP wird nicht mit --enable-discard-path --enable-force-cgi-redirect kompiliert. wie hast Du das gemacht? Einfach im php-cgi ebuild dazu geschrieben? (Overlay)

2. beim Starten von /etc/init.d/lighttpd wird zwar vorher korrekt  /etc/init.d/spawn-fcgi gestartet, allerdings wird es nicht mit beendet. Habe irgendwie keine Idee wie man das machen könnte.

3. Wieso kann man nicht bestimmen an welche IP sich die fcgi-Prozesse binden sollen? 

Macht es evtl. Sinn über Use-Flags zu entscheiden ob Kommunikation per unix-socket, oder per tcp? 

Oder wie sieht das aus mit einem chroot Use-Flag?

----------

## Hilefoks

Da ich leider dieses Wochenende nicht Zuhause bin kann ich mir deine ebuild erst am Montag anschauen und werde dann auch noch näher drauf eingehen... aberr,

zu 1: Ich habe bei mir einfach ein ebuild ins Overlay gelegt (php5-lighttpd) das die Optionen setzt und richtig kompiliert. Allerdings würde ich es besser finden wenn die PHP-Versionen im Portagebaum ein USE Flag "lighttpd" bekommen würden. Aber gut, dafür ist hier der falsche Ort.

zu 2: Auch hier habe ich ein eigenes Init-Script geschrieben, allerdings aus dem Grund das ich mehrere Server gleichzeitig starten wollte. Da ich allerdings, wie gerade schon gesagt, nicht Zuhase bin kann ich es nicht posten - werde ich aber nachholen...

zu 3: kann man nicht? Mh, da muss ich noch mal schauen - ich glaube man kann...

Ob USE-Flags für ein chroot und für die Kommunikation Sinn macht kann ich gerade nicht sagen, - ich denke für ein chroot macht es keinen Sinn aber für die Kommunikation ... Mh...

BTW: Wann kann man Gentoo mal sagen das es nicht allen www-kram nach /var/blabla kopieren soll.   :Evil or Very Mad: 

----------

## andreask

 *Hilefoks wrote:*   

> BTW: Wann kann man Gentoo mal sagen das es nicht allen www-kram nach /var/blabla kopieren soll.  

 

Was spricht dagegen?

http://www.tldp.org/HOWTO/HighQuality-Apps-HOWTO/fhs.html#newtable

----------

