Passwort vergessen?

Benutzername vergessen?

Alles rund um IT, Web und Entwicklung.
Von Nutzern für Nutzer.

Performanter Nginx Webserver auf dem Raspberry Pi mit PHP und APC



Das Raspberry Pi eignet sich dank des geringen Stromverbrauchs perfekt als Webserver. Wenn es um die Geschwindigkeit geht, sind einige Optimierungen und der Einsatz der richtigen Software wie PHP APC und Nginx notwendig.



Aus diesem Grund setzen wir auf den schnellen Webserver Nginx und PHP in Verbindung mit dem Bytecode Cache APC, welcher den kompilierten PHP Code zwischenspeichert.


Installation


Zunächst muss ein passendes Betriebssystem auf dem Raspberry Pi installiert werden. Hierzu verwenden wir am besten Raspbian.

Nach einem Update des Systems mittels

sudo apt-get update
sudo apt-get upgrade


können wir die benötigten Module installieren.

sudo apt-get install nginx php5 php5-cgi php5-fpm php5-gd php-apc


Memory Split


Standardmäßig teilt sich die GPU und die CPU auf dem Raspberry Pi den Arbeitsspeicher von 512 MB auf. Da wir auf einem Webserver in der Regel keine grafische Oberfläche benötigten, kann der der maximale Speicher für die CPU und damit für den Webserver reserviert werden.

Die Anpassung erfolgt über die Datei /boot/config.txt. Diese lässt sich am einfachsten mit dem Editor nano bearbeiten.

sudo nano /boot/config.txt

In der Datei die nachfolgende Zeile anfügen. Hiermit geben wir der GPU das Minimum von 16 MB.

gpu_mem=16


Nginx einrichten


Nun wird der Webserver Nginx konfiguriert. Dies erfolgt über die Konfigurationsdatei /etc/nginx/sites-enabled/default.

Die vHosts werden in den server{} Blöcken definiert. Im ersten größeren Block befindet sich bereits eine typische Konfiguration. In dieser setzen wir nun die Index Dateien und aktivieren den Handler für PHP.

   index index.html index.htm index.php;

   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;
      fastcgi_param SCRIPT_FILENAME $document_root$1;
   }


Worker Prozesse


In der Standardkonfiguration startet Nginx 4 Workerprozesse zur Bearbeitung von Anfragen. Auf Mehrkernsystemen bietet das einen Performancevorteil. Da das Raspberry Pi nur einen CPU Kern besitzt erzeugt diese Funktion nur unnötige Last.

Daher editieren wir die Konfigurationsdatei /etc/nginx/nginx.conf wie folgt.

worker_processes 1


APC einrichten


Bevor der PHP Bytecode Cache von APC verwendet werden kann, muss dieser aktiviert und konfiguriert werden. Dies wird über die Datei /etc/php5/conf.d/20-apc.ini vorgenommen.

extension=apc.so
apc.enabled=1
apc.file_update_protection=2
apc.shm_size=32M
apc.include_once_override=0
apc.shm_segments=1
apc.gc_ttl=7200
apc.ttl=7200
apc.num_files_hint=1024
apc.enable_cli=0


Um die Konfiguration zu übernehmen wird der Webserver und PHP-FPM Dienst neugestartet.

sudo service nginx restart
sudo service php5-fpm restart



Weboberfläche


APC bietet auch ein kleines Webinterface an auf welchem man den aktuellen Status des Caches einsehen kann. Hierzu wird die entsprechende Datei in den Document Root unseres Webservers kopiert.

cp /usr/share/doc/php-apc/apc.php /usr/share/nginx/www/

Im Anschluss kann man das Interface unter der IP des Webservers aufrufen.

http://192.168.1.121/apc.php




Dienste konfigurieren


Abschließend stellen wir noch sicher, dass alle Dienste auch beim Systemstart gestartet werden.

sudo update-rc.d php5-fpm defaults
sudo update-rc.d nginx defaults



Verzeichnis / Document Root


Der Pfad in dem nun die HTML / PHP Dateien abgelegt werden lautet wie folgt.

/usr/share/nginx/www/

Dieser kann natürlich über die Nginx Konfigurationsdatei jederzeit über die Option root angepasst werden.


Htaccess / ModRewrite


Nginx unterstützt keine Htaccess Dateien über welche normalerweise auch Rewrite Regeln angelegt werden. Diese sind unter anderem vom Apache Webserver bekannt.

Mit Nginx werden diese Parameter in abgewandelter Form direkt in der Konfigurationsdatei /etc/nginx/sites-enabled/default hinterlegt.

Hierzu kann der Nginx Online Konverter für Htaccess Dateien verwendet werden.


Fazit


Im Test erreichten wir mit Nginx und 200 gleichzeitigen Sessions eine Transaktionsrate von 352.43 Transaktionen pro Sekunde. Der Apache2 erreichte auf dem Raspberry Pi 221.01 Transaktionen pro Sekunde.

Dies entspricht einer Steigerung um knapp 60%. Damit lohnt sich der dennoch überschaubare Konfigurationsaufwand definitiv.

Quellen: Nginx Logo, Raspberry Pi Logo

Michael Kostka

Fachinformatiker / Systemintegration
Ich schreibe hier regelmäßig zu den Themen Android, Web, Linux und Hardware.

Raspberry Pi Starter Kit
DataCloud

Hinterlasse einen Kommentar

Michael Kostka

04.04.2014 14:26

Hallo Jonesman,

der location Abschnitt muss innerhalb des server{} Blocks stehen.

Zusätzlich muss die index Direktive mit einem Strichpunkt (;) beendet werden. Habe das oben nochmal korrigiert.

Viele Grüße
Michael

Jonesman

01.04.2014 14:18

Irgendetwas stimmt in meiner Konfiguration nicht, bekomme beim Neustart von nginx immer folgende Fehlermeldung:
~ $ sudo service nginx restart
Restarting nginx: nginx: [emerg] "location" directive is not allowed here in /etc/nginx/sites-enabled/default:124
nginx: configuration file /etc/nginx/nginx.conf test failed

Kennt jemand die Lösung?
Danke!