Wenn es darum geht, euer Webprojekt irgendwo unter zu bekommen, stellt sich in erster Linie die Frage, um was für eine Art von Internetauftritt es sich dabei handelt. Bei einer kleineren privaten Homepage für Freunde und Bekannte reicht natürlich ein einfaches Webspaceangebot vollkommen aus. Soll es allerdings ein größerer Internetauftritt für eine ganze Community werden, zahlt es sich früher oder später auf jeden Fall aus einen eigenen Server angemietet zu haben. Für die die sich nicht zutrauen damit umzugehen zu können gibt es sogenannte "Managed Server". Sie kosten meist ein paar Euro mehr im Monat, werden aber dafür komplett vom Hoster eingerichtet und gewartet. Wer sich für diese Methode entschieden hat, kann den Rest überspringen.
Installation eines Apache2 Webservers mit PHP & MySQL:
Ich werde euch zeigen wie ihr Apache2 auf einem Linux Betriebssystem einrichtet und konfiguriert. Apache2, weil es einfach der Standardwebserver schlechthin ist. Ich weise aber darauf hin, dass es durchaus stabile Alternativen gibt.
Folgende Pakete werden benötigt:
apt-get install apache2-mpm-prefork apache2-suexec apache2-utils
Folgende ebenfalls für PHP und MySQL:
apt-get install php5 php5-common php5-dev php5-cgi php5-idn php5-mysql libapache2-mod-php5
Ein paar nützliche PHP Extensions:
php5-curl php5-gd php5-imagick php-apc
In diesem Beispiel haben wir das MPM „Prefork“ installiert. MPM steht für „Multi processing Modules“ und enthält systemspezifischen Code, sagt dem Betriebssystem, wie es mit Prozessen und Threads umzugehen hat.
Das MPM „Prefork“ verhält sich genauso wie schon die frühere Version Apache 1.3. Es läuft ein übergeordneter Prozess, der auf Vorrat genug Kindsprozesse für die eingehenden Anfragen erzeugt.
Bei Tausenden Abfragen jedoch könnte das Ganze ziemlich performancelastig werden. In diesem Fall würde sich das MPM „Worker“ anbieten, das im Gegensatz zu „Prefork“ größtenteils mit Threads arbeitet. Ein Hauptprozess hält immer genügen Kindsprozesse bereit in denen jeweils etliche Threads laufen können.
MPM Worker hat bei vielen Anfragen seine Vorzüge, trotzdem hat sich das Prefork Verfahren, aufgrund der hohen Stabilität, als Standard durchgesetzt.
Da das Erzeugen von Prozessen oder Threads natürlich immer erst mal Ressourcen verbraucht, hat Apache immer Prozesse/Threads auf Vorrat. Dazu gibt es folgende Konfigurationsmöglichkeiten, speziell Admins die mit Floodingattacken zu kämpfen haben sollten sich u.a. mit MinSpareServers und MaxSpareServers auseinandersetzen.
PHP implementieren wir über das Modul libapache2-mod-php5. Das ist im Fall MPM Prefork wohl das einfachste, ansonsten wäre es noch möglich PHP über die fcgid Schnittstelle zu implementieren.
... Platzhalter... Hier kommt noch was
Nach der Installation sollte eine einfache HTML Seite mit dem Text "It Works!" erscheinen wenn ihr die IP Adresse eures Server über den Browser aufruft.
Commands:
Webserver starten:
/etc/init.d/apache2 start
Webserver stoppen:
Webserver neu starten:
/etc/init.d/apache2 restart
Webserver Konfigurationen neu einlesen:
/etc/init.d/apache2 reload
Nach einem Neustart von Apache2 sollte dann auch PHP funktionieren, testen können wir das mit einer typischen phpinfo.php mit folgendem Inhalt:
Bei einem Aufruf von http://host/phpinfo.php sollten allerhand Informationen über PHP zum Vorschein kommen.
Jetzt kümmern wir uns um MySQL und PhpMyAdmin:
apt-get install mysql-server mysql-client phpmyadmin
Während der Installation wird nach einen MySQL Root Passwort gefragt. Außerdem muss der Webserver ausgewählt werden, Apache2.
Nach der Installation ist PHPMyAdmin unter http://IP/phpmyadmin zu erreichen, sollte das nicht der Fall sein muss die das Konfigurationsfile in das Apache Verzeichnis kopiert, und die Konfiguration neu eingelesen werden:
cp /etc/phpmyadmin/apache.conf /etc/apache2/mods-enabled/phpmyadmin.conf
/etc/init.d/apache2 reload
Die wichtigsten Konfigurationsfiles:
/etc/apache2/apache2.conf
Apache2 Config File, enhält allgemeine Einstellungen für den Webserver.
/etc/apache2/conf.d/
Hier sind Konfigurationen von externen Anwendungen gespeichert.
/etc/apache2/httpd.conf
Konfigurationsfile von älteren Apache Versionen. wurde aber von der Apache2.conf abgelöst, aus Kompatibilitätsgründen noch vorhanden.
/etc/apache2/ports.conf
IPs und Ports auf denen der Webserver lauscht.
/etc/apache2/sites-available/
Hier sind die einzelnen vHost Configs gespeichert, was ist das ? Dazu kommen wir gleich.
/etc/apache2/sites-enabled/
Hier liegen Symlinks zu den aktiven vhosts in /sites-available/
Wenn ihr etwas an den Konfigurationsfiles geändert habt, solltet ihr diese vor dem neu einlesen überprüfen, das geht mit dem Befehl „ apache2ctl -t“. Wenn alles in Ordnung ist, sollte das in etwa so aussehen:
user@host:~$ apache2ctl -t
Syntax OK
user@host:~$
Virtualhosts:
Virtualhosts legen fest, wie der Webserver auf bestimmte Hostnames oder IP Adressen reagiert, u.a. auf welchen Pfad verwiesen wird. So können bringen kommerzielle Webhoster oft mehrere hundert/tausend Kundenaccounts auf einem Rechner unter mit nur einer einzigen IP Adresse unter.
Ruft ein Besucher die Domain "www.domain.de" im Browser auf, so wird als erstes im DNS nach der dazu passenden IP Adresse gesucht. Zum Port 80 dieser IP Adresse wird Anschluss eine TCP Verbindung aufgebaut, damit eine HTTP Kommunikation stattfinden kann.
Der Browser vom Besucher sendet im HTTP Request einen Host-Header, dort steht der Hostname drin, über den die IP Adresse des Servers im DNS aufgelöst wurde, also der Domainname den der Besucher zuvor eingegeben hat.
Auf diese Art und Weise können auf einem Server mit nur einer einzigen IP Adresse mehrere Internetangebote zur Verfügung stehen.
Im folgendem Beispiel werden wir einen Hostnamen "domain.tld" als Virtualhost einrichten. Dazu müsst ihr eure Domain natürlich erst mal bei einem Provider eurer Wahl registrieren und einen DNS Eintrag zu eurem Server setzen. Zum Testen reicht es allerdings völlig aus, einen Eintrag in der Hosts Datei anzulegen, damit der Hostname Lokal aufgelöst wird.
Unter Windows liegt die Hosts Datei unter "..\system32\drivers\etc\hosts\system32\drivers\etc\hosts"
Unter Unix/Linux: "/etc/hosts"
Dort müsst ihr einfach eine Zeile mit eurer ServerIP und eurem Hostname, getrennt durch ein Leerzeichen, einfügen.
Beispiel:
127.0.0.1 domain.tld
127.0.0.1 www.domain.tld
Wenn ihr eure echte Domain auf den Server leiten wollt, müsst ihr bei eurem Provider einen DNS A Eintrag (Ipv4) oder DNS AAAA Eintrag (Ipv6) erstellen. Dabei ist zu beachten dass die DNS Daten Cashes zwischengespeichert werden um nicht jedes mal neu vom jeweiligen Nameserver abfragen zu müssen. Aus diesem Grund kann es oft einige Stunden dauern bis ein solcher DNS Eintrag sich vollständig abgeändert hat.
Kommen wir zum Beispiel:
<VirtualHost *>
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot "/var/www/domain.tld/"
</VirtualHost>
Das Beispiel wird im Verzeichnis /etc/apache2/sites-available/ abgespeichert.
Verfügbare Virtualhosts lassen sich mit a2ensite und a2dissite aktivieren und deaktivieren, dabei wird ein Symlink in /etc/apache2/sites-enabled/ angelegt der auf die Datei in /etc/apache2/sites-available/ verweist.
Das gleiche gilt übrigens für Apache Module, sie lassen sich mit a2enmod aktivieren bzw. mit a2dismod deaktivieren. Dabei wird ein Symlink der entsprechenden Datei aus mods-available in mods-enabled angelegt.
Wer den Code gelesen hat wird wahrscheinlich schon verstanden haben, was die einzelnen Direktiven genau machen.
ServerName bestimmt den Hostname. ServerAlias kann dem VirtualHost einen weiteren Namen geben, wird meistens benutzt damit die Webseite sowohl mit als auch ohne „www.“ erreichbar ist. DocumentRoot ist das Verzeichnis, auf dessen Inhalte der Virtualhost zeigt.
Logdateien
Natürlich soll der Apache auch detailierte Logs über Zugriffe oder etwaige Fehler erfassen.
<VirtualHost *>
....
ErrorLog "/var/logs/domain.tld/error_log"
CustomLog "/var/logs/domain.tld/access_log" combined
....
</VirtualHost>
Die Direktive "LogFormat" bietet die Möglichkeit, das Format der Logdateien anzupassen, genaueres dazu findet sich in der Apache Doku.
Die Logdateien können mit der Zeit natürlich eine beachtliche Größe erreichen, aus diesem Grund ist es von Vorteil die Logs regelmäßig herunterzuladen oder zumindest in das gzip Format zu komprimieren.
Um die letzten paar Einträge eines Logs anzusehen bietet sich das Programm "tail" an.
Letzte 50 Einträge aus dem Errorlog anzeigen:
tail -n 50 /var/logs/domain.tld/error_log
Letzte 20 Einträge aus dem Accesslog anzeigen:
tail -n 50 /var/logs/domain.tld/access_log
Es gibt verschiedene Tools wie Webalizer oder Awstat mit deren Hilfe sich die Logs auswerten in einer grafischen Übersicht anzeigen lassen.
Es gibt noch etliche weitere Konfigurationsmöglichkeiten, da ich hier nicht jede einzelne detailiert beschreiben kann verweise ich für genaueres auf die Apache Dokumentation: http://httpd.apache.org/docs/