vHosts konfigurieren

Wichtig ist die Konfiguration der vHosts. Ich empfehle dir für den Anfang mal meine Ordnerstruktur zu übernehmen, wenn du dann verstanden hast wie es funktioniert, kannst du sie gerne an deine Bedürfnisse anpassen.

Hinweis: Ich lege, um die Sicherheit der PHP-Skripte zu erhöhen, für jeden Host einen eigenen User an. Zusammen mit der FastCGI-Unterstützung und einem kleinen Wrapper kannst du jedem Host eine eigene php.ini zuweisen und das Überkreuzlesen zwischen Hosts verhindern. Der Nachteil dieser Methode ist allerdings, dass für jeden Host eigene sog. Children aufgerufen werden, also PHP-Prozesse. Dadurch ist das gemeinsame Nutzen von Speicherplatz (RAM) nicht möglich.

Literatur: Lies dir bitte hierzu auch unbedingt diesen Wiki-Artikel durch.

  1. Zunächst legen wir die Grundordnerstruktur an, die legen wir nur einmal für alle Hosts an. Die Struktur sieht so aus (die Zahl in Klammer gibt die Rechte an, das Kürzel den Owner im Format USER:GROUP):
    • /www (755 www:www)
    • /www/fastcgi (755 www:www)
    • /www/vhosts (755 www:www)
    • /www/vhosts/fastcgi/startup (700 root:wheel)
    • /www/vhosts/config (700 root:wheel)
    • /www/vhosts/domain.de (550 domain.de:domain.de)
    • /www/vhosts/domain.de/htdocs (550 domain.de:domain.de)
    • /www/vhosts/domain.de/.logs (750 www:domain.de)
    • /www/vhosts/domain.de/.session (750 domain.de:domain.de)
    • /www/vhosts/domain.de/.tmp (750 domain.de:domain.de)

  2. Jetzt will ich dir die Ordnerstruktur noch kurz erklären.
    • /www/fastcgi: Hier wird später für jeden Host ein Verzeichnis angelegt, in welches dann die zu ladende PHP.INI und das Socket gelegt werden, also bspw. /www/fastcgi/domain.de/php.ini
    • /www/fastcgi/startup: Wir werden jeden FastCGI-Prozess mit Hilfe eines Wrappers abkapseln. Hierfür sind Startskript nötig um verschiedene Parameter zu übergeben. Diese Startskripte legen wir später hier rein.
    • /www/vhosts/config: In diesem Verzeichnis werden die einzelnen vHost-Konfigurationen abgespeichert, die dann in der lighttpd.conf eingebunden werden.
    • /www/vhosts: In diesem Verzeichnis wird für jeden Host ein Unterverzeichnis angelegt, in welches dann die Logfiles, temporäre Dateien und vor allem das Basisverzeichnis (htdocs) gelegt werden. Hier kommen dann später also die Webseiten rein. Also bspw. /www/vhosts/domain.de/htdocs

  3. Wie du siehst sind es einige Ordner die anzulegen sind für jeden Host. Wenn ich dir jetzt noch sage, dass für jeden Host noch ein eigener Benutzer und eine eigene Gruppe angelegt werden müssen, wird dir sicherlich übel ;-) Aber ich auch hier habe ich eine Lösung in Form eines kleinen Shell-Skriptes für dich, was "Quick & Dirty" für dich einen neuen Host, einen Benutzer und entsprechende Unterverzeichnisse mit den richtigen Berechtigungen anlegt.

    Lediglich die vHost-Konfiguration und die Konfiguration des Erstellungsskriptes musst du per Hand vornehmen, wobei das Erstellungsskript nur einmal an deine IP angepasst werden muss. Hierzu lies dir bitte die Kommentare im Skript durch. Und nicht vergessen die erstellten Konfigurationen entsprechend dem Beispiel in die Datei '/usr/local/etc/lighttpd.conf' einzubinden ("include_shell...").

  4. Lade dir also hier das Skript vhostcreate.sh herunter und passe es an dein System an. Anschließend kannst du einen neuen Host über folgenden Befehl anlegen:

    # vhostcreate.sh create domain.de
  5. Anschließend solltest du noch PHP installieren, was du ja bereits in diesem Tutorial gelernt hast, wobei du die Apache-Module nicht kompilieren, allerdings CGI aktivieren musst: Apache, PHP5, SSL, eAccelerator und Zend

  6. Um nach der Installation von PHP die FastCGI-Prozesse beim Start der Jail automatisch zu starten, füge folgende Zeile in die Datei "/etc/rc.local" der Jail ein:

    for i in /www/fastcgi/startup/*.php.sh; do $i; done
Einen Kommentar hinzufügen

Einen Kommentar hinzufügen

This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)
Code im diesem Bild:
Ihr Name(*):
Kommentar(*):
 
  • March 24, 2010, 10:13 am - Benedikt

    Hi,
    Hast du vielleicht irgendwo eine Zeile vergleichbar mit dieser hier:

    # Entfernt das www aus der URL
    $HTTP["host"] =~ "^www\.(.*)$" {
    url.redirect = ( "^/(.*)" => "http://%1/$1" )
    }

  • March 24, 2010, 10:09 am - sniper

    Super Seite, vielen Dank! Konnte schon viele Zeit sparen.

    Ich habe auch lighttpd am laufen. bisher funktioniert alles super. ich habe deine scripte zum anlegen von vhosts verwendet und bin sehr zufrieden!

    eine frage hätte ich jedoch:

    wenn ich www.domain.de aufrufe, dann macht lighttpd immer das www. am anfang weg. ich möchte jedoch gerne, dass das www. stehen bleibt.

    wie bekomme ich das hin?

  • May 25, 2009, 4:50 pm - Benedikt

    Du musst die php.ini dahin kopieren, wo dein Startskript diese erwartet.

    Hast du das Startup-Skript erstellt? Dann findest du darin ein entsprechendes Skript, in dem der Pfad dazu angegeben ist (Zeile PHPRC).

    Grüsse,
    Benedikt

  • May 25, 2009, 4:32 pm - Boli

    Hallo,

    vielen Dank für deine Antwort.

    Der Webserver läuft und unter meiner Domain wird auch eine index.html richtig dargestellt. Das sieht alles prima aus! Jedoch funktioniert bei mir php nicht. Ich habe PHP installiert und die /usr/local/etc/php.ini bearbeitet.

    Wenn ich meine test.php aufrufe erscheint: No input file specified.

    und im log steht etwas wie:

    2009-05-25 18:14:16: (mod_fastcgi.c.1768) connect failed: Connection refused on unix:/www/fastcgi/TEST.de/TEST.de.socket
    2009-05-25 18:14:16: (mod_fastcgi.c.2956) backend died; we'll disable it for 5 seconds and send the request to another backend instead: reconnects: 0 load: 1

    2009-05-25 18:14:18: (mod_fastcgi.c.3569) all handlers for /test.php on .php are down.
    2009-05-25 18:14:22: (mod_fastcgi.c.2769) fcgi-server re-enabled: unix:/www/fastcgi/TEST.de/TEST.de.socket
    2009-05-25 18:15:30: (mod_fastcgi.c.1768) connect failed: Connection refused on unix:/www/fastcgi/TEST.de/TEST.de.socket
    2009-05-25 18:15:30: (mod_fastcgi.c.2956) backend died; we'll disable it for 5 seconds and send the request to another backend instead: reconnects: 0 load: 1

    2009-05-25 18:15:36: (mod_fastcgi.c.2769) fcgi-server re-enabled: unix:/www/fastcgi/TEST.de/TEST.de.socket
    2009-05-25 18:20:25: (mod_fastcgi.c.1768) connect failed: Connection refused on unix:/www/fastcgi/TEST.de/TEST.de.socket
    2009-05-25 18:20:25: (mod_fastcgi.c.2956) backend died; we'll disable it for 5 seconds and send the request to another backend instead: reconnects: 0 load: 1

    2009-05-25 18:20:26: (mod_fastcgi.c.3569) all handlers for /test.php on .php are down.
    2009-05-25 18:20:31: (mod_fastcgi.c.2769) fcgi-server re-enabled: unix:/www/fastcgi/TEST.de/TEST.de.socket

    Wie muss ich den PHP konfi.? Ich habe die PHP.ini auch in /www/fastcgi/TEST.de kopiert. meine TEST.de.socket ist auch leer. Hast du einen Tip?

    Viele Grüße,

    Boli

  • April 3, 2009, 8:43 pm - Benedikt

    Hallo,
    Cronjob würde hier keinen Sinn machen. Daher muss das Startscript natürlich in die "/etc/rc.local" der Jail eingetragen werden.

    Ich werde die entsprechende Code-Zeile gleich noch ergänzen, danke für den Hinweis.

    Grüsse,
    Benedikt

  • April 3, 2009, 8:37 pm - Jules

    Den Gedankengang der Startup scripts kann ich nicht ganz folgen.
    In deinem Tutorial wird leider nicht beschrieben was am meisten Sinn macht diese zu starten.

    Per Cronjob oder eher beim Booten der Jail?
    Was kannst Du empfehlen?