von Michael Reber

Nginx LEMP Stack auf Rocky Linux 8

Webserver

Rocky Linux 8 ist eine auf CentOS basierende Distribution, die eine stabile und zuverlässige Plattform für die Entwicklung und den Betrieb von Web-Anwendungen bietet.

In diesem Blog-Post zeigen wir Ihnen, wie Sie einen LEMP-Stack (Nginx, PHP 8.1 und MariaDB) auf Rocky Linux 8 installieren und zusätzlich absichern können.

Der Nginx-Webserver ist eine der am häufigsten verwendeten Lösungen für die Bereitstellung von Web-Anwendungen. Nginx ist bekannt für seine Leistung, Skalierbarkeit und Zuverlässigkeit.

Einige der Vorteile von Nginx sind:

  • Hohe Leistung: Nginx ist besonders gut geeignet für die Verarbeitung von statischen Inhalten und die Behandlung von vielen gleichzeitigen Verbindungen.
  • Skalierbarkeit: Nginx ermöglicht es, horizontale Skalierung durch die Verwendung von mehreren Prozessen und die Verteilung der Last auf mehrere Server zu erreichen.
  • Robustheit: Nginx ist für seine Robustheit und Fähigkeit bekannt, auch bei hohen Lasten stabil zu bleiben.
  • Ressourceneffizienz: Nginx verwendet weniger Ressourcen als andere Webserver und ist daher auf leistungsschwachen Servern gut einsetzbar.
Nginx with Cloud

Nginx ist der Bodyguard unter den Webservern – stark, zuverlässig und immer bereit, die Lasten zu tragen.

Grundlegende Quell- und Paket-Installation

Führen Sie zunächst das folgende Kommando aus, um das Remi-Repository auf Ihrem System zu installieren. Dieses Repository enthält aktuellere Versionen von PHP, die nicht im Standard-Repository enthalten sind.

  1. Hinzufügen des Remi-Repository zu Rocky:
# dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
  1. Aktivieren Sie das Remi-Repository für PHP 8.1:
# dnf module enable remi-php81
  1. Aktualisierten Sie das System und installieren Sie dann sogleich alle erforderlichen Abhängigkeiten für das Stack:
# dnf update -y
# dnf install -y nginx mariadb-server mariadb php-imagick php-intl php-common php-pecl-apcu php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick php-intl php-opcache php-zip php-bcmath php-process php-gmp php-pecl-selinux

Konfiguration von MariaDB

  1. Starten Sie den MariaDB-Dienst und aktivieren Sie ihn, indem Sie die folgenden Befehle ausführen:
# systemctl enable mariadb --now
# systemctl status mariadb
  1. Sichern Sie die MariaDB-Installation, indem Sie “mysql_secure_installation” ausführen. Zum Generieren eines starken Passwortes empfiehlt sich der erste Command (folgen Sie anschliessend den Anweisungen):
# openssl rand -base64 30 > /root/.mariadb-root-pw && cat /root/.mariadb-root-pw
# mysql_secure_installation
  1. Erstellen Sie eine neue Datenbank und einen neuen Benutzer für Ihre Web-Anwendung und geben Sie dem Benutzer alle Berechtigungen für die Datenbank, indem Sie die folgenden Befehle ausführen:
# mysql -u root --password=$(cat /root/.mariadb-root-pw)

MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS meine_neue_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MariaDB [(none)]> CREATE USER 'meinuser'@'localhost' IDENTIFIED BY 'mein-passwort-swissmakers';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON meine_neue_db.* TO 'meinuser'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit

Konfiguration von PHP-FPM (Kommunikation zu Ngnix)

  1. Konfigurieren Sie PHP-FPM, indem Sie die Datei /etc/php-fpm.d/www.conf bearbeiten.
    Entfernen Sie die Kommentare und ändern Sie die folgenden Zeilen:
# vim /etc/php-fpm.d/www.conf

    listen = /var/run/php-fpm/php-fpm.sock
    user = nginx
    group = nginx
  1. Starten und aktivieren Sie den PHP-FPM-Dienst:
# systemctl enable php-fpm --now
# systemctl status php-fpm

Basiskonfiguration von Nginx

  1. Konfigurieren Sie Nginx, indem Sie die Datei /etc/nginx/nginx.conf bearbeiten. Fügen Sie die folgenden Zeilen im http-Block hinzu:
# vim /etc/nginx/nginx.conf
server {
    listen 80;
    listen [::]:80;
    server_name meine-webpage.ch www.meine-webpage.ch;

    root /var/www/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # used to pass php scripts to php-fpm via a unix socket
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # deny all hidden files (e.g. .htpasswd) except .well-known/
    location ~* /\.(?!well-known\/) {
    	deny all;
    }

    # protect other system files
    location ~* (?:\.(?:bak|conf|dist|fla|in[ci]|log|psd|sh|sql|sw[op])|~)$ {
    	deny all;
    }
}
  1. Überprüfen Sie die Konfiguration von Nginx auf Fehler:
# nginx -t
  1. Wird kein Fehler gefunden, heisst das, dass unsere Konfiguration valid ist und wir können wie folgt den Nginx Webserver starten:
# systemctl enable nginx --now
# systemctl status nginx
  1. Ist Firewalld aktiv auf Ihrem System, müssen Sie noch den Port 80 wie folgt öffnen, damit der Webserver von ausserhalb (bez. Ihrem LAN aus) erreichbar ist:
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload
  1. Testen Sie den LEMP-Stack, indem Sie eine neue PHP-Datei (info.php) im Verzeichnis /var/www/html/ mit folgendem Code erstellen (diese sollte dann unter http://IP-ihres.servers/info.php erreichbar sein):
# vim /var/www/html/info.php

    <?php phpinfo(); ?>

Bitte beachten Sie, dass diese Anleitung als allgemeine Hilfe gedacht ist und je nach spezifischem Setup und Ihren Anforderungen Anpassungen erforderlich sein können. Es ist wichtig, die Dokumentation und die Anleitungen der verwendeten Software sorgfältig zu lesen, um sicherzustellen, dass die Konfigurationen korrekt durchgeführt werden.

Absichern des LEMP-Stacks

  • Verwenden Sie eine Firewall, um eingehenden Traffic auf die erforderlichen Ports zu beschränken.
  • Verwenden Sie starke Passwörter für alle System- und Datenbankbenutzer.
  • Halten Sie alle Software auf dem neuesten Stand, indem Sie regelmässig Sicherheitspatches anwenden.
  • Verwenden Sie HTTPS für alle Web-Traffic, um Daten in Transit zu verschlüsseln.
  • Beschränken Sie die Anzahl der Benutzer mit Zugriff auf den Server und überwachen Sie verdächtige Aktivitäten.
Foto des Autors

Michael Reber

Jahrelange Erfahrung in Linux, Security, SIEM und Private Cloud

Hinterlassen Sie einen Kommentar

2 × drei =

de_CH