Raspberry Pi – Nginx Webserver installieren

Nginx WebserverDa der Raspberry Pi bekannter-
maßen nicht der schnellste unter den Einplatinen Rechnern ist, sollte man sich bereits bei der Auswahl der zu installierenden Programme Gedanken um die zukünftige Nutzbarkeit machen. Aus diesem Grunde werde ich anstatt auf den Apache Webserver zu setzen den Nginx Webserver  (gesprochen „engine x“) installieren.

Nginx ist ein extrem schneller und leichtgewichtiger, modular aufgebauter Webserver der selbst unter Last nur wenige Resourcen benötigt.

Nginx Webserver installieren

sudo apt-get install nginx

Server starten

sudo /etc/init.d/nginx start

Nun zum testen „http://192.168.178.22“ in den Browser eingeben. Hier sollten Sie natürlich die IP unter der Ihr Raspberry im Netz bekannt ist angeben. Es sollte eine Seite wie „Welcome to nginx on Debian!“ zu sehen sein.

 

MySQL installieren

sudo apt-get install mysql-server

Wärend der Installation erscheint ein blaues Fenster in dem man nun ein sicheres Passwort für den Root Nutzer der MySQL Datenbank vergeben sollte. Geben Sie dieses Passwort zweimal ein.

mysqlrootpasswort

 

PHP installieren

sudo apt-get install php5-fpm

Damit die MySQL Datenbank aus PHP heraus genutzt werden kann muss noch folgendes Paket installiert werden

sudo apt-get install php5-mysql

PHP beschleunigen wir indem wir folgendes Paket installieren. Dieses sorgt dafür dass bereits kompilierte PHP Seiten im cache gespeichert und beim Bedarf erneut daraus aufgerufen werden können.

sudo apt-get install php-apc

 

Nginx Webserver konfigurieren

Damit PHP nun mit dem Nginx Webserver genutzt werden kann müssen wir nun einige Anpassungen in der Datei /etc/nginx/sites-available/default vornehmen.

sudo vim /etc/nginx/sites-available/default

Wenn Sie eine Datei mit vim öffnen, drücken Sie als erstes die Taste „i“ um in den Einfügemodus zu wechseln.
Nehmen Sie nun Ihre Änderungen vor. Wenn Sie fertig sind drücken Sie die Taste „ESC“ um den Einfügemodus zu verlassen.
Drücken Sie anschließend die Taste „:“, „W“ und „Q“ gefolgt von der „Enter“ Taste.

Hinweis
: = Eingabe von Befehlen
W = Speichern der Änderungen
Q = Verlassen des Editors

In der Datei „/etc/php5/fpm/php.ini“ muss ein Wert angepasst werden.
Rufen Sie also folgenden Befehl auf

sudo vim /etc/php5/fpm/php.ini

Die zeile cgi.fix_pathinfo=1 muss geändert werden zu cgi.fix_pathinfo=0
Damit wir nun nicht ewig lange nach der richtigen Stelle suchen müssen, drücken wir die „ESC-Taste“ und geben anschließend folgendes ein.

/cgi.fix_pathinfo=1

Hinweis
/ = Suchen
Der Wert der hinter dem Slash ist der Suchbegriff.

Drücken Sie nun die „Enter-Taste“ um zur gefundenen Stelle zu springen.
Drücken Sie die Taste „i“ um in den Einfügemodus zu wechseln und ändern Sie die 1 zu 0 wie oben angegeben.
Drücken Sie die Taste „ESC“ um den Einfügemodus zu beenden.
Drücken Sie die Taste „:“, „W“ und „Q“ zum Speichern und anschließenden verlassen des Editors.

Nun starten wir den Service PHP5-FPM mit folgendem Befehl neu

sudo service php5-fpm restart

Jetzt legen wir testhalber eine php Datei an bevor wir dem Server beibringen dass er diese neben htm und html Dateien ebenfalls interpretieren soll.

sudo vim /var/www/html/phpinfo.php

Drücken Sie wieder die Taste „i“ zum einfügen und geben Sie folgendes ein!

<?php
phpinfo();
?>

Drücken Sie anschließend wie schon zuvor angegeben die „ESC-Taste“ gefolgt
von den Tasten „:“, „w“ und „q“.

Anschließend öffnen wir erneut die Datei „/etc/nginx/sites-available/default“ um die notwendigen Anpassungen vorzunehmen.

sudo vim /etc/nginx/sites-available/default

Ich ändere hier nun die Zeile

index index.html index.htm index.nginx-debian.html;

und füge den Eintrag index.php hinzu

index index.php index.html index.htm index.nginx-debian.html;

Den folgenden Block

#location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
        #       fastcgi_pass unix:/var/run/php5-fpm.sock;
        #}

ändern wir zu

location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #    fastcgi_pass 127.0.0.1:9000;
        # With php5-fpm:
        try_files $uri $uri/ /index.php?$uri&$args;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

 

Nginx-Webserver neu starten

sudo /etc/init.d/nginx restart

Nun kann man die zuvor erstellte Datei „phpinfo.php“ aufrufen indem man die IP des Servers gefolgt von phpinfo.php in den Browser eingibt.
Wenn jetzt nur eine weiße Seite angezeigt wird, müssen wir noch einen weiteren Schritt unternehmen. Der Fehler tritt übrigens auf, weil eine wichtige fastcgi-Variable in der Standard Konfiguration fehlt.

Geben Sie dazu folgenden Befehl ein.

sudo /etc/nginx/fastcgi_params

Am Ende der Datei fügen wir folgende Zeile ein.

fastcgi_param  SCRIPT_FILENAME    $request_filename;

Webserver neu starten

sudo /etc/init.d/nginx restart

Wenn Sie die Datei phpinfo.php nun im Browser aufrufen sollte diese ordnungsgemäß angezeigt werden.

 

SSL-Zertifikat erstellen

Geben Sie die drei Befehle nacheinander ein.

sudo mkdir /etc/nginx/ssl && cd /etc/nginx/ssl
sudo openssl genrsa -out profwebapps.cloud.key 2048
sudo openssl req -new -key profwebapps.cloud.key -out profwebapps.cloud.csr

Im Laufe der Erzeugung des SSL-Zertifikates werden einige Daten abgefragt.
Wichtig ist hierbei die Angabe unter Common Name wo der Domainname der zu sichernden Seite eingegeben werden sollte.

Country Name (2 letter code) [AU]:DE
State od Province Name (full name) [Some-State]:Bayern
Locality Name (eg, city) []:Ismaning
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organization1 Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []: profwebapps.cloud
Email Address []: Ihre Email-Adresse

A challenge password []:
An optional company name []:

Nun wurden im Verzeichnis „/etc/nginx/ssl“ die folgenden beiden Dateien erzeugt.
profwebapps.cloud.csr
profwebapps.cloud.key

Signieren des selbst erstellten Zertifikates

sudo openssl x509 -req -days 730 -in profwebapps.cloud.csr -signkey profwebapps.cloud.key -out profwebapps.cloud.crt

Jetzt wurde die Datei „profwebapps.cloud.crt“ erzeugt
Das erzeugte Zertifikat ist 730 Tage, also 2 Jahre gültig.

 

SSL-Zertifikat in Nginx Webserver einbinden

sudo vim /etc/nginx/sites-available/default

Meine bereinigte Datei „/etc/nginx/sites-available/default“ sieht jetzt so aus
Alle Anfragen auf Port 80 (HTTP) werden nach Port 443 (HTTPS) umgeleitet.
Das bedeutet, wenn die Seite mit http oder nur mit www aufgerufen wird, dann wird diese jedesmal nach https:// umgeleitet.
Es wird also immer die, durch das SSL-Zertifikat gesicherte Seite aufgerufen.

server {
    listen 80;
    listen [::]:80;
    server_name profwebapps.cloud;
    return 301 https://$server_name$request_uri;
}



server {
        listen 80;
        listen 443 ssl;

        root /var/www/html;

        index index.php index.html index.htm index.nginx-debian.html;

        server_name .profwebapps.cloud;

        ssl_certificate /etc/nginx/ssl/profwebapps.cloud.crt;
        ssl_certificate_key /etc/nginx/ssl/profwebapps.cloud.key;

        location ~ /\.ht {
               deny all;
        }

        location / {
                try_files $uri $uri/ =404;
        }


        location ~ \.php$ {
                include /etc/nginx/fastcgi_params;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #       fastcgi_pass 127.0.0.1:9000;
                try_files $uri $uri/ /index.php?$uri&$args;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

Erfahren Sie im nächsten Teil, wie Sie phpMyAdmin mit Nginx nutzen und phpMyAdmin dabei vor Angriffen von aussen absichern können.

Über Enrico S.

Programmierer, Webdesigner, Grafiker, Blogger, Screencaster, Arduino- und eMobility Enthusiast.

Kommentare geschlossen.