LAMP steht für Linux Apache MySQL PHP. Diese Komponenten werden benötigt, um dynamische Webseiten und -anwendungen zu entwickeln beziehungsweise darzustellen. Dabei handelt es sich bei dem Apache um einen Webserver, bei MySQL um eine Datenbank und bei PHP um eine Skriptsprache. Im Gegensatz zu den weniger gebräuchliche Windowsvarianten (XAMP) wird dabei häufig auf ein Linuxsystem als Basis zurückgegriffen. In unseren Beispiel verwenden wir dabei Debian. Grundsätzlich ist es auch möglich Alternativen zu nutzen, beispielsweise Lighttpd für den Webserver und MariaDB oder PostgreSQL für die Datenbank. Die gängigste Konfiguration jedoch besteht aus Apache, MySQL und PHP. Die meisten Admin-Panels setzen eine entsprechende Umgebung automatisch auf und erlauben die Bedienung durch eine Weboberfläche.

Etwas weniger abstrakt dargestellt kann man die Funktion ungefähr wie folgend verstehen: Der Webserver stellt statische Inhalte wie Webseiten dar, indem er dem Besucher den zugehörigen Quellcode präsentiert. Dieser Quellcode wird vom Browser des Besuchers interpretiert und dargestellt. Die Dynamik dabei geschieht zum Beispiel durch eine Scriptsprache wie PHP: der Apache kann zwar keine PHP Scripte interpretieren, er weiß allerdings, dass PHP dies kann. Er schickt also den entsprechenden Quellcode gemeinsam mit weiteren ihm zur Verfügung stehenden Informationen wie zum Beispiel Eingaben des Besuchers an den PHP Interpreter und wartet auf die Auswertung. PHP interpretiert nun den Quellcode, verarbeitet diesen und greift dabei möglicherweise auf eine Datenbank zurück. Darunter kann man eine Tabelle verstehen, in der entweder Informationen abgerufen oder gespeichert werden. Das Ergebnis wird dann zurück an den Apache geschickt, der es entsprechend ausgibt.

 

Apache Webserver

Der Apache Webserver ist in erster Linie im Einsatz, um Inhalte im World Wide Web abrufbar zu machen. Nach der Installation des Webservers und PHPs mittels

apt-get install apache2 php5 libapache2-mod-php5
/etc/init.d/apache2 restart

lässt sich die Funktionalität bereits testen. Hierzu wird in /var/www/ eine Datei namens info.php mit folgendem Codeinhalt erstellt:

<?php
phpinfo();
?>

Nun lässt sich diese Datei im Web-Browser mittels http://ip-des-servers/info.php aufrufen. Es sollte eine PHP-Informationsseite erscheinen.

Innerhalb von /etc/apache2/mods-available finden sich Module, welche zur Aktivierung von weiteren Funktionen eingeschaltet werden können - innerhalb von /etc/apache2/mods-enabled sind jene, die bereits eingeschaltet sind. Es bietet sich an mod_rewrite einzuschalten, da dies für viele Webanwendungen von Vorteil ist. Der genaue Umfang des Moduls kann der Apache Dokumentation entnommen werden - einige Details finden Sie auch weiter unten in diesem Dokument. Mithilfe von a2enmod und a2dismod lassen sich Module ein und ausschalten:

root@server:/etc/apache2/mods-enabled# a2enmod rewrite
Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Neben a2enmod und a2dismod existieren die Befehle a2ensite und a2disite, mit welchen es möglich ist Seiten ein und auszuschalten. Die entsprechenden Ordner lauten: /etc/apache2/sites-available und /etc/apache2/sites-enabled.

 

MySQL Datenbankserver

Der MySQL Datenbankserver hält Daten vor, auf welche mittels PHP zugegriffen wird. Installiert wird auch hier über apt-get:

apt-get install mysql-server mysql-client php5-mysql

Bei der Installation wird nach dem Root-Passwort für MySQL gefragt - Wählen Sie hier unbedingt ein sicheres Passwort. Häufig ist es hilfreich eine Oberfläche zur Administration von Datenbanken zu haben; hierzu kann PHPMyAdmin installiert werden:

apt-get install phpmyadmin

Bei der Installation taucht die Frage auf welcher Webserver automatisch konfiguriert werden soll; hier sollte der Apache2 gewählt werden. Die Frage ob die Datenbank für PHPMyAdmin mit dbconfig-common konfiguriert werden soll, sollte bejaht werden.

 

Nähere Informationen zu PHP

Es gibt verschiedene Möglichkeiten PHP mit dem Apache Webserver zu benutzen. Die einfachste, aber auch unsicherste Methode ist PHP als Modul zu nutzen. Dabei wird PHP mit denselben Rechten ausgeführt wie der Webserver und hat somit Zugriff auf alle Dateien, auf die auch der Webserver zugreifen kann. Dies lässt sich zwar mittels open_basedir und ähnlichen Einstellungen etwas Einschränken, dennoch hat PHP nach wie vor zuviele Rechte. Der größte Vorteil liegt dabei in der Performance.

Eine Alternative ist PHP als CGI zu benutzen. Mithilfe von suexec hat jeder PHP Prozess somit zugewiesene Rechte (beispielsweise per VirtualHost). Allerdings ist PHP-CGI sehr langsam und der Resourcenverbrauch steigt; Für jede Anfrage wird hier ein Prozess gestartet - Und die Resourcen werden solange genutzt, bis das PHP Skript abgearbeitet ist.

Eine weitere Alternative ist FastCGI. Deutlich schneller als die normale CGI Variante und ein guter Kompromiss zwischen der Modul-Variante und der CGI-Variante. Ein weiterer Vorteil wenn PHP mit (Fast-)CGI benutzt wird ist, dass beim Apache eine Threaded-MPM genutzt werden kann (z.B. worker), was wiederrum für bessere Performance sorgt als es mit prefork (Jede Anfrage erzeugt einen neuen Prozess) möglich ist.

Zusammenfassend gilt: Ist Performance wichtig und wird auf dem Server nur eine Webseite betrieben beziehungsweise mehrere Seiten von der selben vertrauenswürdigen Person, kann PHP als Modul installiert werden. Dabei muss man jedoch in Kauf nehmen, dass ein möglicher Programmierfehler in einer der Scripte den gesamten Webserver beeinflussen kann.

Bei Installationen, auf denen mehrere verschiedene Benutzer Ihre Websites pflegen, sollte PHP immer mit FastCGI genutzt werden - oder bei Nutzung des Moduls zumindest verstärkt abgesichert werden.

 

Sicherheit und PHP

Eine gute Möglichkeit PHP abzusichern ist die Nutzung von Suhosin. Ein entsprechendes Paket ist in der Debian Paketverwaltung vorhanden. Das Team hinter dem Suhosin Projekt sucht nach Schwachstellen in PHP und behebt diese - Suhosin bringt auch viele Parameter mit sich, wodurch eine optimiert Konfiguration der Ressourcen möglich ist. Allerdings sollte bei Nutzung genau geprüft werden, ob alle Anwendungen richtig funktionieren; durch die Limitierungen könnte es nämlich auch zu Problemen kommen.

Wenn PHP als Modul verwendet wird, ist es möglich im VirtualHost des Apaches diverse php_admin_values einzutragen. Hierdurch lässt sich beispielsweise der Absender einer eMail auf die Domain festlegen. Und mittels "open_basedir" lassen sich include Befehle und ähnliches auf das Verzeichnis des Users beschränken.

Wird PHP als (Fast-)CGI genutzt, steht eine php.ini pro Webhost zur Verfügung und die Einstellungen können in der jeweiligen php.ini gemacht werden. Grundsätzlich sollten die folgenden Einstellungen bei PHP bedacht und gegebenenfalls angepasst werden:

  • allow_url_fopen/allow_url_include : Erstere Einstellung erlaubt das öffnen von (entfernten) Websites. Zweitere das "Inkludieren" von PHP-Skripten von entfernten Websites. Erste Einstellung ist Standardmässig an-, Zweitere ausgeschaltet. Wenn Sie nicht wissen, wie versiert Ihre Nutzer sind, sollten sichergestellt werden, dass beide Einstellungen ausgeschaltet sind und diese nur auf Wunsch freigeschaltet werden.
  • curl* : Mit dem Ausschalten von allow_url_fopen ist es aber noch nicht ganz getan; Mithilfe von curl ist es auch möglich auf entfernte Websites zuzugreifen. Entsprechend müssten fsockopen, curl_exec und curl_multi_exec ebenfalls verboten werden.
  • register_globals : Kann eine potentielle Sicherheitslücke darstellen, daher sollte dies ausgeschaltet sein. Im Übrigen gilt register_globals seit PHP 5.3.0 als veraltet.
  • disable_functions : Mithilfe von disable_functions lassen sich diverse Funktionen von PHP verbieten. Es macht Sinn beispielsweise den Zugriff auf die Shell zu verbieten; andernfalls könnten Ihre Benutzer mittels exec(); direkt Programme auf dem Server ausführen. Die folgenden Funktionen sollten dabei in Betracht gezogen werden: show_source, system, shell_exec, passthru, exec, phpinfo, shell, symlink, popen, proc_open
 

Der Apache Webserver

Der Apache lässt verschiedene MPM's zu, welche für die Verteilung der Ressourcen und das Spawnverhalten von vielen gleichzeitigen Prozessen - also parallelen Abrufen von Webseiten - zuständig sind. Dabei ist primär Multithreading ein entscheidendes Schlagwort: darunter zu Verstehen ist, dass gleichzeitige Abarbeiten mehrerer paralleler Ausführungen innerhalb eines Programms. Dies ist seit der rapiden Zunahme von Multicoreprozessoren ein erheblicher Vorteil, da so sämtliche Ressourcen gleichzeitig genutzt werden können. Die gängigsten Varianten sind prefork ohne Multithreading und worker mit Unterstützung für Multithreading. Letzteres sollte zumindest bei geteilten Umgebungen mit mehreren Nutzern nur in Verbindung von FastCGI oder CGI verwendet werden.

Darüber hinaus gibt es einige nennenswerte Module wie mod_security, welches die Sicherheit des Webservers weiter erhöhen kann. Vor der Verwendung sollte jedoch abgewogen werden ob diese Sicherheit notwendig ist. Sämtliche sicherheitsrelevanten Einstellungen resultieren automatisch in Einschränkungen, die vorhandene Anwendungen negativ beeinflussen können, aber nicht automatisch müssen. Mit mod_security lässt sich der HTTP-Traffic noch genauer loggen, real-time Monitoring und Angriffserkennung umsetzen. Außerdem lassen sich diverse Angriffe präventiv verhindern. Einen genauen überblick liefert die mod_security Dokumentation.

mod_rewrite

Das Modul mod_rewrite ist ein nützlicher Helfer, um HTTP-Adressen in ein schöneres Format umzuschreiben. Dies hat aber nicht nur ästetische Vorteile, sondern hilft auch der Suchmaschinenoptimierung und erleichtert die Benutzung. Eine Adresse wie: /index.php?page=5&modul=67&part=2 ist weder suchmaschinen- noch benutzerunfreundlich. Eine bessere Alternative wäre /impressum/disclaimer.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]
RewriteRule ^css/([^\.]+)\.css$ css.php?file=$1 [L]

Die erste Regel schaltet mod_rewrite ein. Die zweite und dritte Regel stellt sicher, dass mod_rewrite nur genutzt wird, wenn der Request-Filename nicht als Verzeichnis oder Datei existent ist. Wird also foobar.html aufgerufen und foobar.html existiert, wird es nicht zu index.php?path=foobar weitergeleitet. Die vierte Regel sorgt nun dafür, dass der komplette Request-String an index.php?path= gereicht wird. Aus "index/foobar/5" wird also "index.php?path=index/foobar/5" welches sich dann mit PHP weiter verarbeiten lässt.

Ein besonderer Tip zum Abschluss: Die fünfte und letzte Regel sorgt dafür, dass alle Requests an css/*.css zu css.php?file= geleitet werden. Damit lassen sich CSS Dateien on-the-fly mittels PHP vor der Ausgabe filtern.

mod_cband

Mit Hilfe von mod_cband lässt sich die Bandbreite von Benutzern und Usern im Webserver limitieren. Dies kann von Vorteil sein, wenn einige Nutzer des Servers verstärkt Downloads zur Verfügung stellen und dann nur noch wenig Bandbreite für die übrigen Webseiten vorhanden ist.

Beispielkonfiguration eines Apache Webservers

In der nachfolgenden Beispielkonfiguration eines Apache Webservers wird davon ausgegangen, dass mehrere Internetseiten von unterschiedlichen Benutzern bereitgestellt werden sollen. Eine Webseite wird dabei als virtueller Host bezeichnet. Als Verzeichnisstruktur hat sich die Folgende bewährt:

  • /var/www/     (Hauptverzeichnis)
    • example.de/     (Beispieldomain eines virtuellen Hosts)
      • htdocs/     (Inhalte der Webseite)/
      • cgi-bin/     (Scriptinterpreter wie PHP pder Perl)/
      • logs/     (Logdateien für Fehler und Zugriffe)/
      • tmp/     (Temporäre Daten wie Sessions oder Uploads)/
      • subdomains/     (Subdomains sofern vorhanden)/

Es gibt einige Erweiterungen und Abweichungen hiervon: So könnte beispielsweise nebst cgi-bin, logs und htdocs ein Verzeichnis config existieren, in welchem die Konfiguration des VirtualHosts gespeichert wird. Innerhalb von httpd-vhosts.conf beziehungsweise in der "/etc/apache2/apache2.conf" würde dann beispielsweise: "Include /var/www/*/config/apache2*.conf" stehen. Ein Ordner "statistics" oder "stats" könnte vorhanden sein, um Statistiken von "awstats" vorzuhalten. In dem Konfigurationsordner könnten auch weitere zum Kunden oder zur Domain gehörende Konfigurationen gespeicher werden, beispielsweise Nameserver und FTP Konfigurationsdateien aber auch die php.ini oder der FCGI-Starter. In diesem Fall gehen wir davon aus, dass bei Verwendung von FastCGI ein Verzeichnis "fcgi" existiert.

Daraus ergibt sich nun folgende Beispieldatei für einen virtuellen Host (VirtualHost) von Apache:

<VirtualHost 84.201.38.2:80>
    # Wenn es das Modul suexec_module gibt.
    <IfModule suexec_module>
        # Benutzer und Gruppe auf vu2048:vu2048 für diesen vHost festlegen
        SuexecUserGroup vu2048 vu2048
    </IfModule>

    # EMail Addresse des Webmasters dieses vHosts
    ServerAdmin     webmaster@example.de

    # Hauptverzeichnis dieses vHosts
    DocumentRoot    /var/www/example.de/htdocs
         
    ServerName      example.de
    # Nur www.example.de und example.de werden verwendet
    # Andere Subdomains müssen hier definiert werden
    ServerAlias     www.example.de example.de

    # Formate und Verzeichnisse für Logs
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
    CustomLog /var/www/example.de/logs/access.log combined
    ErrorLog /var/www/example.de/logs/error.log
         
    # cgi/perl configuration
    ScriptAlias /cgi-bin/ /var/www/example.de/cgi-bin/
    <Directory /var/www/example.de/cgi-bin>
        AllowOverride AuthConfig
        Options +ExecCGI
        Order allow,deny
        Allow from all
    </Directory>

    # Hauptverzeichnis
    <Directory /var/www/example.de/htdocs>
        # Indexe zeigen ein Verzeichnislisting an, was ein
        # Sicherheitsrisiko darstellt, daher wird ein "minus" genutzt um
        # dieses Feature auszuschalten
        Options -Indexes Includes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    # Falls PHP5 als Modul installiert ist
    <IfModule mod_php5.c>
        # Openbasedir festlegen und somit Zugriff auf bestimmte
        # Verzeichnisse beschränken
        php_admin_value open_basedir "/var/www/example.de/:/var/www/example.de/phptmp/:/usr/share/php/"

        # Temporäres Verzeichnis festlegen
        php_admin_value upload_tmp_dir "/var/www/example.de/tmp/"

        # Session Daten auf temporäres Verzeichnis legen
        php_admin_value session.save_path "/var/www/example.de/tmp/"

        # Einstellungen für den Mailversand.
        php_admin_value sendmail_path '/usr/sbin/sendmail -f vu2048 -t -i'
    </IfModule>
         
    # Falls PHP mittels mod_fastcgi genutzt wird
    <IfModule mod_fastcgi.c>
        ScriptAlias /php5/ /var/www/example.de/fcgi/
        <Directory "/var/www/example.de/fcgi">
            AllowOverride None
            Options +ExecCGI -MultiViews -Indexes
            Order allow,deny
            Allow from all
        </Directory>
    </IfModule>

    # Falls PHP mittels mod_fcgid genutzt wird
    <IfModule mod_fcgid.c>
        <Directory /var/www/example.de/htdocs>
            FCGIWrapper /var/www/example.de/fcgi/php5-fcgi-starter .php
            Options +ExecCGI
        </Directory>
        <Directory "/var/www/example.de/fcgi">
              AllowOverride None
              Options +ExecCGI MultiViews -Indexes
              Order allow,deny
              Allow from all
        </Directory>
    </IfModule>
</VirtualHost>

Die Datei "php5-fcgi-starter" könnte dabei wie folgt aussehen:

#!/bin/sh
umask 022

# in diesem Verzeichnis befindet sich die php.ini
PHPRC="/var/www/example.de/config/"
export PHPRC

TMPDIR="/var/www/example.de/tmp"
export TMPDIR

PHP_FCGI_CHILDREN=2
export PHP_FCGI_CHILDREN

exec /usr/bin/php5-cgi
 

Hotline
 
Hotline des Rechenzentrums

Fragen? Rufen Sie uns an!
Montag - Freitag 10:00 - 19:00 Uhr

+49 69 - 900 180 - 0

 
Aktionen & News
 

Dedizierte Supermicro Xeon Server - ab 70,00 Euro

Angebote

 

Zweiter Standort
 
Hotline des Rechenzentrums

Erfahren Sie mehr über unseren zweiten Standort in der Hanauer Landstrasse in Frankfurt am Main.

mehr erfahren

Zertifizierungen
 
TüV geprüftes Rechenzentrum
ISO 27001 zertifiziertes Rechenzentrum
ISO 9001 zertifiziertes Rechenzentrum


Knowledge Base
 

Hilfreiche Artikel zum Thema Netzwerk, Server & IT.

mehr erfahren


Galerie
 

Sehen Sie sich in einem virtuellen Rundgang in unserem Rechenzentrum um:

Niederspannungshauptverteilung Unterbrechungsfreie Strom Versorgung
Kaltwassererzeuger Bereitstellung individueller SAT-Dienstleistungen


100% Ökostrom
 
100% Öko-Strom