Schlagwort-Archive: php

Lighttpd mit vHosts unter Ubuntu Hardy

Seit einiger Zeit tendiere ich dazu Lighttpd dem guten alten Apachen vorzuziehen. Hauptgrund dafür ist aber weniger die immer wieder hervorgehobene bessere Performance (nicht umsonst setzen z.B. YouTube und MySpace auf den Ultraleichtflieger), sondern das mir die Konfiguration einfach etwas unkomplizierter erscheint als beim, vielleicht etwas mächtigeren, aber dafür auch unübersichtlicheren Apachen. Eigentlich auch egal, denn jeder sollte ja selbst entscheiden wem er den Vorzug gibt.

Eingerichtet wird Lighty hier mit PHP 5 und dem Modul 'simple_vhost', mit dem sehr einfach mehrere virtuelle Hosts angelegt werden können.

Wenn wir fertig sind, werden die Seiten unter folgender Ordner-/Dateistruktur organisiert sein:

/var/www/servers - quasi das Hauptverzeichnis des Webservers, hierin werden die virtuellen Hosts angelegt

/var/www/servers/example.com - Ein Beispiel für einen virtuellen Host

/var/www/servers/example.com/htdocs - Hier landen die Dateien, die beim Aufruf von "http://example.com" angezeigt werden sollen

/var/www/servers/example.com/logs - Hier werden die Logdateien gesammelt

/var/www/servers/example.com/server.conf - In dieser Datei wird die Konfiguration für den Host vorgenommen

So, aber nun direkt rein ins Getümmel und die Installation starten:

Installieren

  1. sudo apt-get install lighttpd php5-cgi

Module aktivieren

Danach werden die oben angesprochenen Module aktiviert ('fastcgi' wird für die Anbindung an PHP benötigt):

  1. sudo lighty-enable-mod fastcgi
  2. sudo lighty-enable-mod simple-vhost

Nach einem 'sudo /etc/init.d/lighttpd force-reload' sollte der der Webserver bereits unter http://localhost erreichbar sein.

Lighttpd Testseite

Konfiguration von mod_simple_vhost

Ausgegangen von der oben erklärten Ordnerstruktur müssen die drei Optionen des 'mod_simple_vost' in der Datei '/etc/lighttpd/conf-available/10-simple-vhost.conf' folgendermaßen konfiguriert werden:

  1. simple-vhost.server-root = "/var/www/servers/"
  2. simple-vhost.document-root = "/htdocs/"
  3. simple-vhost.default-host = "example.com"

Anstatt 'example.com' muss dort natürlich eure Standarddomain stehen!

Danach sollten die angelegten vHosts unter der jeweiligen Domain erreichbar sein.  Dazu ein kleines Beispiel:

Wenn im Browser die Adresse 'http://zeroathome.de/dingsbums.html' aufgerufen werden würde, würde das zur Anzeige der Datei '/var/www/servers/zeroathome.de/htdocs/dingsbums.html' führen.

Nach einem '/etc/init.d/lighttpd force-reload' können neue vHosts unterhalb von '/var/www/servers/' angelegt werden.

Konfiguration der einzelnen vHosts

Problem bei dieser Variante der vHost-Konfiguration ist, dass die Konfiguration der einzelnen Hosts nicht so einfach ist. Doch Opensource wäre nicht was es ist, wenn es nicht auch dafür eine relativ einfache Lösung gäbe. (Die Grundversion stammt übrigens von hier, wurde von mir nur leicht angepasst: http://redmine.lighttpd.net/projects/lighttpd/wiki/HowToSupportConfigurationPerVirtualHost)

Dazu wird die folgende Zeile in die Datei '/etc/lighttpd/conf-available/10-simple-vhost.conf' eingefügt, die dazu führt das ein kleines Skript ausgeführt wird:

  1. include_shell "/var/www/servers/config_servers"

Anschließend wird die Datei '/var/www/servers/config_servers' angelegt und mit diesem Inhalt befüllt:

  1. #!/bin/bash
  2.  
  3. for VHOST in `find /var/www/servers/ -mindepth 1 -maxdepth 1 \( -type d -or -type l \) -exec test -e "{}/server.conf" \; -exec basename "{}" \; 2>/dev/null` ; do {
  4. echo "\$HTTP[\"host\"] == \"$VHOST\" {"
  5. echo "var.vhost_name = \"$VHOST\""
  6. echo "var.vhost_path = \"/var/www/servers/$VHOST\""
  7. cat "/var/www/servers/$VHOST/server.conf"
  8. echo "server.errorlog = \"/var/www/servers/$VHOST/logs/error.log\"",
  9. echo "accesslog.filename = \"/var/www/servers/$VHOST/logs/access.log\""
  10. echo "}"
  11. } ; done

Zu guter Letzt wird die Datei noch ausführbar gemacht:

  1. sudo chown www-data:www-data /var/www/servers/config_servers
  2. sudo chmod u+x /var/www/servers/config_servers

Dann natürlich noch ein '/etc/init.d/lighttpd force-reload' und die neue Konfiguration ist übernommen.

Die Konfigurationsdatei muss dann, wie oben bereits erwähnt unter '/var/www/servers/example.com/server.conf' liegen um berücksichtigt zu werden. Nachdem eine neue Konfigurationsdatei hinzugefügt wurde oder eine vorhandene geändert wurde, muss immer ein '/etc/init.d/lighttpd force-reload' erfolgen, sonst ist die Konfiguration nicht wirksam!

Fertig!

So, das wars bereits. Ein Grundkonfigurierter Lighty fertig für die Arbeit als lokaler oder Internet-Webserver. Wenn gewünscht gibts demnächst noch einige Erweiterungen, wie zum Beispiel SSL oder WebDAV.

Alle Angaben natürlich wie immer ohne Gewähr und alles auf eigene Gefahr und so!

3 phpMyAdmin Alternativen

phpMyAdmin ist, wenn es um die einfache und vor allem plattformübergreifende Administration von SQL-Datenbanken geht, kaum noch wegzudenken. Einzig die Komplexität macht die Bedienung teilweise zu einem ziemlichen Such-und-Find-Spielchen.

Doch es gibt Alternativen, die teilweise durch ihre Einfachheit, oder durch ihre durchdachte Oberfläche, überzeugen können. Hier ein kleiner Vergleich der drei Kandidaten phpMiniAdmin, phpMinAdmin und SQL Buddy.

phpMiniAdmin

Login Maske von phpMiniAdmin Bedienungoberfläche phpMiniAdmin

Installation

Als spartanischste der drei Alternativen kommt phpMiniAdmin in Form einer einzigen 22kb schweren php-Datei daher. Sieht man dagegen das phpMyAdmin-Paket mit knappen 1,5MB in der kleinsten Paketierung ist das schonmal bemerkenswert. Diese Datei legt man an einen per Webserver erreichbaren Platz und ruft sie im Browser auf.

Konfiguration

Konfiguration in diesem Sinne gibt es keine, man meldet sich einfach nach Aufruf des Skriptes mit einem in MySQL vorhandenen Benutzer an und wählt eine Tabelle aus, die man bearbeiten kann. Einfacher gehts definitiv nicht.

Bedienung

Die Leichtgewichtigkeit macht sich leider auch in der Bedienung bemerkbar. Aber eher negativ, denn es fehlen doch so einige Funktionen, die man eventuell vermissen könnte. Zum Beispiel eine Funktion zum Anlegen neuer Datenbanken oder Tabellen. Es sind nur Basisfunktionen wie Anzeige des Tabellenlayouts, das Löschen, Optimieren, Reparieren, Exportieren und Importieren vorhanden. Alles weitere muss über von Hand geschriebene SQL-Queries in einem Textfeld ausgeführt werden.

Fazit

Um eine Alternative zu sein, ist phpMiniAdmin meiner Meinung nach ein wenig zu spartanisch geraten. Denn wenn ich eh fast alle Aktionen per SQL-Query ausführen muss, dann kann ich das auch auf der Konsole erledigen und kann mir auch den wirklich winzigen 22kb sparen.

phpMinAdmin

Installation

Auch hier ist es wieder mit dem Download einer einzelnen php-Datei getan, die aber mit ~150kb immerhin 6x so groß ist wie die von phpMiniAdmin. Auch diese läßt sich nach dem Platzieren an einen für den Webserver erreichbaren Ort einfach im Browser aufrufen.

Konfiguration

Auch hier ist die Konfiguration mehr als einfach: Host eingeben auf dem MySQL installiert ist, Benutzername und Passwort darunter und schon ist man drin.

Bedienung

phpMinAdmin kommt schon wesentlich Featurereicher daher und bietet im Prinzip alles was phpMyAdmin auch kann, aber alles ein wenig aufgeräumter. Und rein subjektiv betrachtet auch eine Ecke schneller. Funktionen die in phpMiniAdmin fehlen sind hier ebenso selbstverständlich wie die Unterstützung von 10 unterschiedlichen Sprachen. Große Schwächen sind mir auf den ersten Blick nicht aufgefallen.

Fazit

Auf den ersten Blick ist phpMinAdmin eine wirklich gute und ausgereifte Alternative zum Schwergewicht phpMyAdmin. Die einfache Installation, Konfiguration und auch die Bedienung können überzeugen. Klare Empfehlung zum Testen!

SQL Buddy

Installation

Im Gegensatz zu den ersten beiden Kandidaten kommt SQL Buddy mit einer ausgewachsenen Ordner-Struktur daher, wiegt aber im Download auch nur schmale 250kb. Installation ist ähnlich einfach wie die der Vorgänger, einfach den im Paket enthaltenen Ordner an einen für den Webserver erreichbaren Ort legen und den Speicherort per URL im Browser aufrufen.

Konfiguration

Konfiguration gibt es auch hier keine große. Genau wie bei phpMinAdmin reicht die Eingabe von Hostname, Benutzenamen und Passwort.

Bedienung

Sofort fällt auf, das bei SQL Buddy nicht nur auf Funktion, sondern auch auf die Form geachtet wurde. Salopp gesagt ist es quasi das Web2.0 der php-MySQL-Administratoren. Die Ladezeiten sind erfreulich kurz und Funktionen lassen sich im Vergleich zu phpMyAdmin und phpMinAdmin keine vermissen. Die Leiste am oberen Bildrand zeigt unterschiedliche Funktionen, je nachdem in welcher Ansicht man sich gerade befindet. Alles in allem eine sehr flüssige und intuitive Bedienung die SQL Buddy da bietet.

Fazit

Klare Empfehlung auch hier, auf jeden Fall für alle die ein wenig Wert auf Eyecandy legen. Aber auch die Bedienung der AJAX-Oberfläche ist sehr gut und man fühlt sich fast wie in einer Desktop-Applikation. Funktionen habe ich, beim Schönling unter den Kandidaten, ähnlich wie bei phpMinAdmin auf den ersten Blick keine vermisst.

Größe Installation Konfiguration Bedienung Gesamt
phpMyAdmin 1,5-2,5 MB ++ - o o
phpMiniAdmin ~22KB +++ + - +
phpMinAdmin ~150KB +++ +++ +++ +++
SQL Buddy ~250KB ++ +++ +++ ++

Kleine Downtime

phpmysql2Letzte Nacht gab es eine kleine Downtime aufgrund der Umstellung meines Accounts auf PHP 5 und MySQL 5. Wurde langsam Zeit, denn ab 31.12.07 wird PHP 4 nicht mehr weiterentwickelt und der Support eingestellt.

Webserver ruhig stellen

apache.testseite.gifMal zur Abwechslung was Sicherheitsrelevantes. Auf der Suche nach Sicherheitslücken grasen Programme jeden Tag Server im Internet ab, nach ungepatchten Systemen und Diensten. Da wäre es natürlich praktisch wenn zum Beispiel der Webserver seine Versionsnummer nicht jedem der sie haben will preis geben würde. Und dabei ist es ganz einfach dem Apachen die Zunge zu verknoten:

In der Datei 'apache.conf' die Zeile

ServerTokens All

in

ServerTokens Prod umschreiben.

Dann noch schnell den Server neu starten und Apache zeigt anstatt diesem Header:

HTTP/1.1 200 OK
Date: Sun, 19 Aug 2007 18:13:32 GMT
Server: Apache/2.2.3 (Ubuntu) PHP/5.2.1 mod_perl/2.0.2 Perl/v5.8.8
Content-Type: text/html; charset=UTF-8

nur noch diesen hier an:

HTTP/1.1 200 OK
Date: Sun, 19 Aug 2007 18:16:08 GMT
Server: Apache
Content-Type: text/html; charset=UTF-8

Wie man das ganze auch noch bei PHP erreicht zeigt der Ursprungs-Artikel auf adminday.de. Ausserdem gibt es auf adminlife.net eine Anleitung wie man lighttpd die Geschwätzigkeit austreibt.

Noch mehr Sicherheitstipps für den Apache Webserver gibt es auf securityfocus.com.