Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:nginx:lamp

LNMP Installation

Warum [L]NMP

Ich persönlich verwende mittlerweile nur noch NGINX als Webserver, da dieser in meinen Augen deutlich besser zu konfigurieren ist und auch deutlich stabiler läuft. Des Weiteren ist NGINX vielseitiger und verwendet deutlich modernere Technologien.

PHP Version

Wenn man auf einer modernen Distro arbeitet, sollte es eigentlich keine Probleme machen, eine aktuelle PHP Version zu verwenden. Debian 9 (Stretch) hat in den eigenen Repositories PHP 7.1 im Angebot.

Verwendet man doch eine ältere Distro, möchte aber eine aktuelle PHP Version, oder eventuell eine noch aktuellere, als die, die im Repository angeboten wird, so sollte man auf das Sury Repository wechseln. Für weitere Infos: https://packages.sury.org/php/README.txt

Für Raspbian Stretch ist auch schon PHP 7.1 verfügbar! Möchte man dennoch 7.2 haben, kann man auch hier auf externe Repos zurückgreifen.

NGINX Version

Bei der NGINX Version kann man auf drei Versionen zurück greifen.

Zum einen die Versionen aus dem Distro Repository. Diese sind meistens sehr alte Stable Versionen.

Als Alternativen bieten sich die Stable bzw. Mainline Versionen von NGINX selber an. Hier muss man selber wissen, ob man lieber auf Stabilität oder auf neuste Funktionen Wert setzt. Eine Ausführliche Anleitung zum Einrichten bietet NGINX bei sich auf der Seite: http://nginx.org/en/linux_packages.html


Installation

apt-get install php{version}-fpm nginx mariadb-server

HINWEISE Bei der Installation von php-fpm werden alle wichtigen Module mitgeladen wie bspw. php-cli. Alle weiteren müssen nachinstalliert werden. Eine Auflistung findet man mit dem Befehl apt-cache search php{version}- Zur Installation von NGINX bitte nicht nginx-full o.ä, verwenden. Je nach Version der Distro, ist mariadb-server noch nicht vorhanden. In Debian 9 wurde MySQL mit MariaDB ersetzt. mysql-server ist seit dem ein Alias für mariadb-server.

Weitere Hinweise zur MariaDB Installation sind hier auffindbar


Konfiguration

WICHTIG Je nach PHP Version kann es sein, dass euer UNIX Socket Pfad sich geändert hat. Bitte achtet darauf bei der Konfiguration und ersetzt diesen. Herrausfinden, wo der Socket liegt kann man mit

snippet.bash
find /var/run/ -name 'php*.sock'

Außerdem kann sich je nach Konfiguration von NGINX die Konfigurationsdatei an zwei verschiedenen Orten befinden. Entweder in /etc/nginx/conf.d/ oder in /etc/nginx/sites-enabled/

Allgemeine Konfiguration

snippet.nginx
server {
    listen 80 default_server;
    listen [::]:80 default_server;
 
    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;
    server_name _;
 
    location / {
            try_files $uri $uri/ =404;
    }
 
    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}

SSL

snippet.nginx
# HTTP Server für HTTP -> HTTPS (gilt für mc8051.de, www.mc8051.de und wiki.mc8051.de)
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name mc8051.de www.mc8051.de wiki.mc8051.de;
    return 302 https://$host$request_uri;
}
 
# HTTPS Server horcht auf mc8051.de sowie www.mc8051.de
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
 
    root /var/www/html/;
    index index.php index.html index.htm;
    server_name mc8051.de www.mc8051.de;
 
    ssl_certificate /etc/letsencrypt/live/mc8051.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mc8051.de/privkey.pem;
 
    add_header Strict-Transport-Security "max-age=31536000;" always;
 
    location / {
            try_files $uri $uri/ =404;
    }
 
    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}

Proxy

snippet.nginx
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name wiki.mc8051.de;
 
    ssl_certificate /etc/letsencrypt/live/wiki.mc8051.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wiki.mc8051.de/privkey.pem;
 
    add_header Strict-Transport-Security "max-age=31536000" always;
 
    root /var/www/html/;
    index index.html index.php index.htm;
 
    # Upload Limit dem Externen Server überlassen
    client_max_body_size 0;
 
    ## Definition Reverse Proxy ##
    location / {
        proxy_pass http://<ip>[:port]/;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Rewrite bei Port Forwarding

Sollte der NGINX Server von außen bspw. per 8081 erreichbar sein, aber intern auf 80 geroutet werden, so geht dies spätestens bei einem rewrite schief.
Dieser findet schon statt, wenn man keinen Slash am Ende eines Verzeichnisses anfügt.

Als Abhilfe dafür gibt es folgende Rewriterule.
Achtung falls kein http_host gesendet wird, funktioniert dieser Rewrite nicht!

snippet.nginx
if (-d $request_filename) {
        rewrite [^/]$ $scheme://$http_host$uri/ permanent;
}
linux/nginx/lamp.txt · Zuletzt geändert: 22.07.2018 23:23 von Gurkengewuerz