Da man auf dem Raspberry Pi nicht sehr viele Ressourcen zur Verfügung hat, scheidet Apache als Webserver für mich aus. Ich habe lighttpd und Nginx ausprobiert. Von lighttpd war ich am Anfang sehr überzeugt. Er kann alles was man benötigt. Als mein Setup komplizierter wurde, war ich nicht mehr in Lage in die Ideen mit lighttpd umzusetzen. Die Ursache liegt weniger im Funktionsumfang, sondern an den zur Verfügung stehenden Tutorials, Beispielkonfigurationen sowie der Default-Konfiguration wenn man lighttpd bei Raspbian installiert. Den endgültigen Todesstoß hat lighttpd bekommen, als ich Passanger ausprobieren wollte. Für Apache und Nginx gibt es fertige Passanger-Module bzw. funktionierenden Install-Skripte. Ich möchte nicht sagen, dass lighttpd schlechter als Nginx ist, aber ich bin bei “komplexen” Setups mit mehreren virtuellen Hosts und rewrite-Magie besser mit Nginx zurecht gekommen.
Im folgenden werde ich mich auf Nginx Engine-X konzentrieren. da es für ihn sehr viele Tutorials gibt und er sehr ressourcenschonend ist, ist er meiner Meinung nach die erste Wahl für den Raspberry Pi.
Viele werden mit nur einen Webserver nicht glücklich, weil ein Webserver nur statische Inhalte ausliefert. Damit Nginx php ausliefern kann benötigt man php auf seinen Rechner sowie den PHP Fast CGI Process Manager. Dieser verwaltet php-Prozesse, welche wiederum statisches HTML generieren und an den Nginx weiter geben.
Nginx mit php installieren und einrichten
Vor der Installation von neuen Pakten sollte man nachsehen, ob es Updates gibt. Ein sicherheitsbewusster Admin aktualisiert jeden Tag seine Systeme, gerade wenn sie öffentlich erreichbar sind.
# zu root werden
sudo su -
apt-get update
apt-get upgrade
apt-get install nginx php5-fpm php5-cgi php5-cli php5-common
Nginx konfigurieren
Wenn man nur einen virtuellen Host einrichten möchte, kann man die gesamte Konfiguration in der
/etc/nginx/ningx.conf
erledigen. Das Aufteilen der Konfiguration in mehrere Dateien macht diese
übersichtlicher. Somit ist es auch möglich virtuelle Host zu aktivieren und zu deaktivieren.
Meine Empfehlung ist, dass jede Applikation/Seite ein eigener Host ist. So hat jede Applikation ihr eigenes Log-File und eine übersichtliche Konfiguration. Der Nachteil ist, dass man mehrere (Sub) Domains benötigt. Das ist nicht mit allen Dyndns Anbietern möglich.
Konfigurationen, welche global gültig sind, schreibe ich auch
in die /etc/nginx/ningx.conf
. Das sind z.B. ssl-Offloading, Redirekt zu https und die
ssl-Konfiguration.
Das ist eine exemplarische Konfiguration eines Host, welcher php ausführt und auf Port 80 lauscht. Der Host lauscht auf die Namen localhost und awesomephp.example.com. Port 80 ist der Standardport für http. Wenn ihr nur einen Host konfiguriert habt (nur ein server-Abschnitt), dann wird dieser immer genommen, unabhängig davon was im host-Header der Anfrage steht.
server {
listen 80;
server_name localhost awesomephp.example.com;
root /var/www/awesomephp;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ ^(.+\.php)(.*)$ {
try_files $fastcgi_script_name =404;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include /etc/nginx/fastcgi_params;
}
access_log /var/log/nginx/awesome.access.log;
error_log /var/log/nginx/awesome.error.log;
}
Nachdem der Nginx konfiguriert ist muss man die Konfiguration nur noch neu laden.
service nginx reload
Test der Konfiguration
Nachdem der Nginx fehlerfrei seine Konfiguration neu geladen hat bzw. neu gestartet wurde kann man sie mit dem folgenden Minimalbeispiel testen:
mkdir -p /var/www/awesomephp
echo "<? phpinfo(); />" > /var/www/awesomephp/info.php
Wenn nur ein Host konfiguriert ist, dann kann man jetzt Browser http://192.168.1.100/info.php
aufrufen
und es erscheint eine Übersicht der php-Einstellungen. Ich gehe davon aus, dass der Raspberry Pi die IP
192.168.1.100 hat.