Dedicated Servers & VPS22. Januar 2026 30 Aufrufe

Wie man Nginx und PHP-FPM auf einem VPS installiert

Wie man Nginx und PHP-FPM auf einem VPS installiert

Bereitstellung einer leistungsstarken Web-Stack: Nginx & PHP 8.2 FPM

Dieser Leitfaden unterstützt Sie bei der Einrichtung einer robusten und sicheren Serverumgebung auf einem VPS, ideal für die Bereitstellung moderner Frameworks wie Laravel, Symfony oder CMS wie WordPress.

🎯 Konfigurationsziele

  • Webserver: Nginx (hohe Leistung für gleichzeitige Verbindungen).
  • PHP-Engine: PHP 8.2 über FPM (FastCGI Process Manager).
  • Sicherheit: HTTPS über Let's Encrypt, UFW-Firewall und Schutz vor Brute-Force-Angriffen.
  • Optimierung: Statischer Cache und saubere Zugriffsrechteverwaltung.

📋 Voraussetzungen

  • Ein Server mit Debian 12 oder Ubuntu 22.04+.
  • SSH-Zugriff mit sudo-Berechtigungen.
  • Ein Domainname, dessen "A"-Eintrag auf die IP Ihres Servers zeigt.

Schritt 1: Vorbereitung und Installation von Nginx

Aktualisieren Sie zunächst die Paketliste und installieren Sie den Webserver.

# Systemupdate
sudo apt update && sudo apt upgrade -y

# Installation und Aktivierung von Nginx
sudo apt install -y nginx
sudo systemctl enable --now nginx

Firewall-Konfiguration (UFW): Erlauben Sie den Webverkehr, damit Ihre Website erreichbar ist.

sudo ufw allow "Nginx Full"

Schritt 2: Installation und Optimierung von PHP 8.2

Wir installieren PHP 8.2 mit den wesentlichen Erweiterungen für die meisten modernen Anwendungen.

# Installation von PHP-FPM und gängigen Modulen
sudo apt install -y php8.2-fpm php8.2-cli php8.2-mysql php8.2-curl \
  php8.2-xml php8.2-gd php8.2-zip php8.2-mbstring php8.2-intl

🔒 PHP-Sicherheit

Standardmäßig versucht PHP, die nächstgelegene Datei auszuführen, wenn die genaue Datei nicht gefunden wird. Deaktivieren wir dieses riskante Verhalten:

# Deaktivierung von cgi.fix_pathinfo
sudo sed -i 's/^\s*;*\s*cgi.fix_pathinfo\s*=.*/cgi.fix_pathinfo=0/' /etc/php/8.2/fpm/php.ini
sudo systemctl restart php8.2-fpm

Schritt 3: Dateistruktur und Berechtigungen

Wir werden ein Verzeichnis für Ihre Website erstellen und restriktive, aber funktionale Berechtigungen anwenden. Ersetzen Sie mon-domaine.com durch Ihre tatsächliche Domain.

# Verzeichnisstruktur erstellen
sudo mkdir -p /var/www/mon-domaine.com/public

# Besitz an den Webbenutzer (www-data) übertragen
sudo chown -R www-data:www-data /var/www/mon-domaine.com

# Berechtigungen sichern (Verzeichnisse 750, Dateien 640)
sudo find /var/www/mon-domaine.com -type d -exec chmod 750 {} \;
sudo find /var/www/mon-domaine.com -type f -exec chmod 640 {} \;

Schritt 4: Konfiguration des Nginx Virtual Hosts

Erstellen Sie eine saubere Konfigurationsdatei, um Nginx mitzuteilen, wie Anfragen an Ihre Domain verarbeitet werden sollen.

sudo nano /etc/nginx/sites-available/mon-domaine.com

Kopieren Sie diesen Konfigurationsblock:

server {
    listen 80;
    server_name mon-domaine.com www.mon-domaine.com;
    root /var/www/mon-domaine.com/public;
    index index.php index.html;

    # Behandlung sauberer URLs (Laravel/Symfony)
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Ausführung von PHP-Dateien
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    # Cache-Optimierung für statische Dateien
    location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp)$ {
        expires 7d;
        access_log off;
        add_header Cache-Control "public";
    }

    # Zugriff auf versteckte Dateien verhindern (.env, .git usw.)
    location ~ /\. {
        deny all;
    }
}

Website aktivieren:

sudo ln -s /etc/nginx/sites-available/mon-domaine.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Schritt 5: HTTPS-Sicherung (Certbot)

Die Umstellung auf HTTPS ist heutzutage unerlässlich. Let's Encrypt ermöglicht eine kostenlose Automatisierung.

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d mon-domaine.com -d www.mon-domaine.com

Schritt 6: Wartung und erweiterte Sicherheit

🛡️ Schutz vor Angriffen

Installieren Sie Fail2ban, um IPs automatisch zu sperren, die versuchen, auf Ihre SSH- oder Webzugriffe zu drängen.

sudo apt install -y fail2ban

🔍 Schnelle Fehlerbehebung (Troubleshooting)

SymptomWahrscheinliche UrsacheAktion
Fehler 502 Bad GatewayPHP-FPM ist gestoppt oder der Socket ist falsch.sudo systemctl status php8.2-fpm
Fehler 403 ForbiddenFalsche Berechtigungen für Verzeichnisse oder fehlender Index.Überprüfen Sie chown und das Verzeichnis /public
PHP-Seite heruntergeladenDer Block location ~ \.php$ fehlt.Überprüfen Sie die Nginx-Konfiguration und laden Sie sie neu.

💡 Varianten (RHEL / Rocky Linux Distributionen)

Wenn Sie auf einer RedHat-Basis sind, verwenden Sie dnf. Der PHP-Socket befindet sich normalerweise hier: fastcgi_pass unix:/run/php-fpm/www.sock;