LEMP Stack unter Debian Wheezy
In dieser Anleitung wird die Installation von LEMP unter Debian Wheezy (Linux, Nginx, Mysql und PHP) Schritt für Schritt erklärt. Nginx wird auch mal poetisch als der „unsinkbare Webserver“ bezeichnet. Dank des Threadpools kann er viele TCP-Verbindungen (auch sehr langsame wie die von Smartphones) bei geringer Systembelastung gleichzeitig bedienen.
MySQL ist ein leistungsstarkes RDBMS (Relational Database Management System) und steht kostenlos zur Verfügung. Es ist die Basis prominenter Webapplikationen wie z.B. von WordPress oder Joomla.
Bei der Erstellung dieses Artikels wurden die einzelnen Schritte auf einem Rackhansa VPS (Virtual Private Server) getestet. Diese Anleitung funktioniert auf jeder Standardinstallation von Debian Wheezy.
OS Update
Zuerst bringen Sie Ihr Betriebssystem auf den aktuellsten Stand, damit alle Sicherheitsupdates installiert werden können:
apt-get update && apt-get upgrade
Installation MySQL Server
Die Installation von MySQL ist ganz simpel mit:
apt-get install mysql-server
Während der Installation werden Sie, wie im folgendem Bild zu sehen ist, aufgefordert das root-Passwort Ihres MySQL-Servers zu vergeben.
Und noch eine Kleinigkeit:
# Systemtabellen initialisieren mysql_install_db # Machen Sie Ihre MySQL-Instanz sicher /usr/bin/mysql_secure_installation
Installation NGINX
Nur ein Befehl:
apt-get install nginx
Bei jeder Änderung von nginx-Konfigurationsdateien können Sie mit dem folgenden Befehl den nginx-Webserver neustarten. Weil nginx nach der Installation nicht automatisch gestartet wird, starten Sie ihn jetzt neu.
service nginx restart
Test: Mit ifconfig
können Sie die Adresse Ihres vServer anzeigen lassen. Mit einem Browser rufen Sie http://meine-ip-adressse/ auf (oder Sie stellen sicher, dass Ihre DNS-Einstellungen korrekt sind und verwenden http://www.meine-domain.de/ anstelle der IP-Adresse) und werden mit folgender Nachricht begrüßt:
Welcome to nginx!
nginx für die Zusammenarbeit mit php5-fpm
konfigurieren:
Editieren Sie die Datei /etc/nginx/sites-enabled/default
, danach muss nginx neu gestartet werden.
# finden Sie die Zeile server_name localhost; # und ändern Sie in: server_name www.meine-domain.tld; # finden Sie die Zeile index index.html index.htm; # und ändern Sie in (index.php wird jetzt auch als index akzeptiert) index index.html index.htm index.php; # Editieren Sie den Block für php-Verarbeitung wie folgt: location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }
Nginx muss neu gestartet werden:
service nginx restart
PHP
Für php5-fpm
müssen nur wenige Pakete angegeben werden, der Rest wird über Abhängigkeiten geregelt:
apt-get install php5-fpm php5-mysql
Konfiguration: cgi.fix_pathinfo
ist standardmäßig auf 1 gesetzt. Dies kann unter Umständen zu einer Sicherheitslücke führen. Entsprechende Hinweise finden Sie als Kommentar in der Konfigurationsdatei php.ini
. Editieren Sie die Datei mit „nano /etc/php5/fpm/php.ini
und suchen Sie die Zeile mit cgi.fix_pathinfo
heraus und ändern Sie diese wie folgt:
cgi.fix_pathinfo=0
Unter Debian wird php5-fpm
bereits mit dem schnellen Unix Socket /var/run/php5-fpm.sock
vorkonfiguriert. Nur nochphp5-fpm
muss gestartet werden:
service php5-fpm restart
PHP-Info Page
Editieren Sie eine neue Datei: nano /usr/share/nginx/www/info.php
mit folgendem Inhalt:
<?php phpinfo(); ?>
Test: Mit einem Browser rufen Sie http://meine-ip-adressse/info.php. Die Ausgabe von info.php sollte wie folgt aussehen:
PHPMyAdmin
Es ist angenehmer mit einer graphischen Oberfläche Ihren Datenbankserver verwalten zu können. Im Folgenden wird PHPMyAdmin so installiert, dass Sie nur auf localhost darauf zugreifen können und Ihre Datenbank somit vor Angriffen aus dem Internet geschützt ist. Für einen gelegentlichen Zugriff auf Ihre Datenbank ist der Aufbau eines SSH-Tunnels viel komfortabler als das Hantieren mit SQL-Befehlen.
Der Hauptvorteil PHPMyAdmin gegen einen SSH-Protokoll auszutauschen ist, dass SSH weniger Angriffsfläche als jede Webapplikation für Hacker bietet und mit weniger Aufwand abgesichert werden kann (sicherere Passwörter).
Zuerst führen wir die Installation mit einer Standard-Konfiguration für apache2
durch, damit PHPMyAdmin für sich selbst die notwendigen MySQL-Tabellen anlegen kann.
apt-get install phpmyadmin # Akzeptieren Sie die automatische Konfiguration für Apache2 # Configure database for phpmyadmin with dbconfig-common? # Bitte antworten Sie mit Yes. # Dann werden Sie aufgefordert, das root Password ihrer MySQL-installation einzugeben # und das Passwort für phpmyadmin zu vergeben.
Nun legen wir eine nginx-Konfigurationdatei für phpmyadmin an, editieren Sie die neue Web-Serverkonfiguration mit nano /etc/nginx/sites-available/phpmyadmin
und füllen Sie diese mit folgendem Inhalt:
server { listen localhost:8000; server_name localhost; root /usr/share/phpmyadmin; index index.php; location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
Dabei bedeutet die Zeile listen localhost:8000
, dass diese Website vom Internet aus nicht erreichbar ist. Aktivieren Sie diese neue Konfiguration mit folgenden Befehlen:
cd /etc/nginx/sites-enabled/ ln -s ../sites-available/phpmyadmin . service nginx restart
SSH-Tunnel mit folgenden Befehlen:
# Einen neuen Benutzer anlegen (als root auf Ihrem Server) useradd -m test passwd test # Falls Sie unter Windows arbeiten, können Sie z.B. putty für den Tunnelaufbau verwenden. # Als normaler Benutzer auf Ihrem Rechner in Ihrem Büro # SSH-Tunnel (ersetzen Sie www.meine-domain.tld mit dem richtigen Hostname oder IP-Adresse) ssh -fCN test@www.meine-domain.tld -L 8000:localhost:8000 # Die Option des obigen Befehls: # -f : ssh wird als Hintergrundprozess gestartet # -N : kein remote command wird ausgeführt # -C : Datenkompression wird eingeschaltet # 8000:localhost:8000 : der entfernte TCP-Port 8000 wird mit localhost:8000 verbunden.
URL Ihrer PHPMyAdmin: http://localhost:8000/
Ihr Server ist jetzt für echte Applikationen bereit.
WAF (Web Application Firewall)
WAF bietet einen erweiterten Schutz für Web-Applikationen. Dieses Thema wird in einem separaten Artikel behandelt.