Dedicated Servers & VPS10. Dezember 2025 28 Aufrufe

Installieren von Nginx und PHP-FPM auf einem Linux VPS

Installieren von Nginx und PHP-FPM auf einem Linux VPS

Einführung

Nginx (ausgesprochen "engine-x") ist ein leistungsstarker Webserver, bekannt für seine Geschwindigkeit, Stabilität und geringen Ressourcenverbrauch. In Kombination mit PHP-FPM (FastCGI Process Manager) bildet er einen leistungsstarken Stack zur Bereitstellung moderner PHP-Anwendungen wie WordPress, Laravel, Symfony oder Drupal.

Warum Nginx + PHP-FPM wählen?

Merkmal Apache + mod_php Nginx + PHP-FPM
Speicher Hoher Verbrauch Geringer Footprint
Gleichzeitige Verbindungen Begrenzt Tausende
Statische Dateien Gut Hervorragend
Konfiguration Verteilt über .htaccess Zentralisiert
Leistung Gut Hervorragend

Enthaltene Versionen pro Betriebssystem

System Nginx PHP Kernel
Debian 13 "Trixie" 1.26 8.4 6.12 LTS
Ubuntu 24.04 LTS 1.24 8.3 6.8

📋 Voraussetzungen

  • Ein VPS mit Ubuntu 24.04 LTS oder Debian 13 "Trixie"
  • Root-Zugriff oder Benutzer mit sudo Berechtigungen
  • Etablierte SSH-Verbindung
  • Domainname, der auf die IP des VPS zeigt (optional, aber empfohlen)

🔄 Schritt 1: System aktualisieren

Aktualisieren Sie vor der Installation die Systempakete:

sudo apt update && sudo apt upgrade -y

Wenn ein Neustart erforderlich ist:

[ -f /var/run/reboot-required ] && sudo reboot

📦 Schritt 2: Nginx installieren

Installation

sudo apt install nginx -y

Installation überprüfen

nginx -v

Erwartetes Ergebnis:

  • Debian 13: nginx version: nginx/1.26.x
  • Ubuntu 24.04: nginx version: nginx/1.24.x

Status des Dienstes überprüfen

sudo systemctl status nginx

Der Dienst sollte active (running) anzeigen.

Nginx-Verwaltungsbefehle

Aktion Befehl
Starten sudo systemctl start nginx
Anhalten sudo systemctl stop nginx
Neustarten sudo systemctl restart nginx
Konfiguration neu laden sudo systemctl reload nginx
Beim Start aktivieren sudo systemctl enable nginx
Beim Start deaktivieren sudo systemctl disable nginx
Konfiguration testen sudo nginx -t

Firewall (UFW) konfigurieren

Wenn UFW aktiviert ist, erlauben Sie den HTTP- und HTTPS-Verkehr:

# UFW-Status überprüfen
sudo ufw status

# Nginx (HTTP + HTTPS) erlauben
sudo ufw allow 'Nginx Full'

# Oder separat erlauben
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Installation testen

Öffnen Sie Ihren Browser und gehen Sie zu http://IHRE_VPS_IP. Sie sollten die Nginx-Startseite mit der Nachricht "Welcome to nginx!" sehen.


🐘 Schritt 3: PHP-FPM installieren

Für Debian 13 "Trixie" (PHP 8.4)

sudo apt install php8.4-fpm php8.4-cli php8.4-common php8.4-mysql \
php8.4-zip php8.4-gd php8.4-mbstring php8.4-curl php8.4-xml \
php8.4-bcmath php8.4-intl php8.4-soap php8.4-opcache php8.4-readline -y

Für Ubuntu 24.04 LTS (PHP 8.3)

sudo apt install php8.3-fpm php8.3-cli php8.3-common php8.3-mysql \
php8.3-zip php8.3-gd php8.3-mbstring php8.3-curl php8.3-xml \
php8.3-bcmath php8.3-intl php8.3-soap php8.3-opcache php8.3-readline -y

Installation einer spezifischen Version über PPA (nur für Ubuntu)

Wenn Sie eine andere PHP-Version auf Ubuntu benötigen:

# Hinzufügen des PPA-Repository Ondřej
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# Beispiel: PHP 8.4 installieren
sudo apt install php8.4-fpm php8.4-cli php8.4-common php8.4-mysql \
php8.4-zip php8.4-gd php8.4-mbstring php8.4-curl php8.4-xml \
php8.4-bcmath php8.4-intl php8.4-soap php8.4-opcache -y

PHP-Installation überprüfen

php -v

Erwartetes Ergebnis:

  • Debian 13: PHP 8.4.x (cli)
  • Ubuntu 24.04: PHP 8.3.x (cli)

Status von PHP-FPM überprüfen

Debian 13:

sudo systemctl status php8.4-fpm

Ubuntu 24.04:

sudo systemctl status php8.3-fpm

Der Dienst sollte active (running) anzeigen.

PHP-FPM-Socket identifizieren

Der Socket ist entscheidend für die Kommunikation zwischen Nginx und PHP:

ls /run/php/

Typisches Ergebnis:

  • Debian 13: php8.4-fpm.sock
  • Ubuntu 24.04: php8.3-fpm.sock

⚙️ Schritt 4: Nginx für PHP-FPM konfigurieren

Standardkonfiguration bearbeiten

Bearbeiten Sie die Standardkonfigurationsdatei:

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

Konfiguration für Debian 13 (PHP 8.4)

server {
    listen 80 default_server;
    listen [::]:80 default_server;

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

    server_name _;

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

    # PHP-FPM-Konfiguration
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Zugriff auf .htaccess-Dateien blockieren
    location ~ /\.ht {
        deny all;
    }
}

Konfiguration für Ubuntu 24.04 (PHP 8.3)

server {
    listen 80 default_server;
    listen [::]:80 default_server;

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

    server_name _;

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

    # PHP-FPM-Konfiguration
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Zugriff auf .htaccess-Dateien blockieren
    location ~ /\.ht {
        deny all;
    }
}

Konfiguration überprüfen

sudo nginx -t

Erwartetes Ergebnis:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nginx neu starten

sudo systemctl reload nginx

✅ Schritt 5: PHP mit Nginx testen

Testdatei für PHP erstellen

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Testseite aufrufen

Öffnen Sie Ihren Browser: http://DEINE_IP_VPS/info.php

Sie sollten die Seite phpinfo() sehen, die Folgendes anzeigt:

  • PHP-Version (8.4.x oder 8.3.x)
  • Server-API: FPM/FastCGI
  • Installierte Erweiterungen
  • Konfigurationsvariablen

Testdatei löschen (Sicherheit)

sudo rm /var/www/html/info.php

⚠️ Sicherheit: Lassen Sie niemals eine phpinfo()-Datei in der Produktion, da sie sensible Informationen preisgeben kann.


🌐 Schritt 6: Erstellen eines Virtual Hosts (Server Block)

Virtual Hosts ermöglichen das Hosting mehrerer Websites auf demselben Server.

Website-Verzeichnis erstellen

sudo mkdir -p /var/www/monsite.com/html
sudo chown -R $USER:$USER /var/www/monsite.com
sudo chmod -R 755 /var/www/monsite.com

Homepage erstellen

nano /var/www/monsite.com/html/index.php

Hinzufügen:

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Willkommen auf MonSite.com</title>
    <style>
        body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
        h1 { color: #333; }
    </style>
</head>
<body>
    <h1>MonSite.com funktioniert!</h1>
    <p>Nginx + PHP-FPM erfolgreich konfiguriert.</p>
    <p>PHP-Version: <?php echo phpversion(); ?></p>
</body>
</html>

Virtual Host-Konfiguration erstellen

sudo nano /etc/nginx/sites-available/monsite.com

Für Debian 13 (PHP 8.4):

server {
    listen 80;
    listen [::]:80;

    server_name monsite.com www.monsite.com;
    root /var/www/monsite.com/html;

    index index.php index.html index.htm;

    # Logs
    access_log /var/log/nginx/monsite.com.access.log;
    error_log /var/log/nginx/monsite.com.error.log;

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

    # PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Sicherheit - Verstecke versteckte Dateien
    location ~ /\. {
        deny all;
    }

    # Cache für statische Dateien
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt|woff|woff2|ttf|svg)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}

Für Ubuntu 24.04 (PHP 8.3): Ersetzen Sie php8.4-fpm.sock durch php8.3-fpm.sock.

Virtual Host aktivieren

sudo ln -s /etc/nginx/sites-available/monsite.com /etc/nginx/sites-enabled/

Standardwebsite deaktivieren (optional)

sudo rm /etc/nginx/sites-enabled/default

Testen und neu laden

sudo nginx -t
sudo systemctl reload nginx

🔒 Schritt 7: SSL-Zertifikat installieren (Let's Encrypt)

Certbot installieren

sudo apt install certbot python3-certbot-nginx -y

SSL-Zertifikat erhalten

sudo certbot --nginx -d monsite.com -d www.monsite.com

Befolgen Sie die Anweisungen:

  1. Geben Sie Ihre E-Mail-Adresse ein
  2. Akzeptieren Sie die Bedingungen
  3. Wählen Sie die Umleitung von HTTP auf HTTPS (empfohlen)

Automatische Erneuerung überprüfen

sudo certbot renew --dry-run

⚡ Schritt 8: PHP-FPM optimieren

Konfiguration des PHP-FPM-Pools

Debian 13:

sudo nano /etc/php/8.4/fpm/pool.d/www.conf

Ubuntu 24.04:

sudo nano /etc/php/8.3/fpm/pool.d/www.conf

Empfohlene Einstellungen je nach RAM

VPS 1-2 GB RAM:

pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500

VPS 4 GB RAM:

pm = dynamic
pm.max_children = 25
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 1000

VPS 8+ GB RAM:

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 2000

Parametererklärung

Parameter Beschreibung
pm Prozessverwaltungsmodus (statisch, dynamisch, bedarfsorientiert)
pm.max_children Maximale Anzahl von Kindprozessen
pm.start_servers Startprozesse
pm.min_spare_servers Minimale inaktive Prozesse
pm.max_spare_servers Maximale inaktive Prozesse
pm.max_requests Anzahl der Anfragen vor Prozessneustart

php.ini optimieren

Debian 13:

sudo nano /etc/php/8.4/fpm/php.ini

Ubuntu 24.04:

sudo nano /etc/php/8.3/fpm/php.ini

Empfohlene Einstellungen:

; Speicher
memory_limit = 256M

; Upload
upload_max_filesize = 64M
post_max_size = 64M

; Ausführung
max_execution_time = 300
max_input_time = 300
max_input_vars = 3000

; Zeitzone
date.timezone = Europe/Paris

; OPcache (Leistungsverbesserung)
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2
opcache.validate_timestamps = 1

; Sicherheit
expose_php = Aus

PHP-FPM neu starten

Debian 13:

sudo systemctl restart php8.4-fpm

Ubuntu 24.04:

sudo systemctl restart php8.3-fpm

⚡ Schritt 9: Nginx optimieren

Hauptkonfiguration

sudo nano /etc/nginx/nginx.conf

Optimierte Konfiguration:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 1024;
    multi_accept on;
    use epoll;
}

http {
    # Grundlegende Einstellungen
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    # Puffergrößen
    client_max_body_size 64M;
    client_body_buffer_size 128k;

    # MIME-Typen
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # Protokollierung
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # Gzip-Komprimierung
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript 
               application/rss+xml application/atom+xml image/svg+xml;

    # Includes
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


Nginx neu starten

sudo nginx -t
sudo systemctl restart nginx

🛡️ Schritt 10: Installation sichern

Sicherheitsheader

Fügen Sie in Ihrer Server-Block-Konfiguration hinzu:

# Sicherheitsheader
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;

Begrenzung von Anfragen (Rate Limiting)

In /etc/nginx/nginx.conf, Abschnitt http :

# Begrenzungszonen
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;

In Ihrem Server-Block:

location / {
    limit_req zone=one burst=20 nodelay;
    limit_conn addr 10;
}

📁 Dateistruktur

Nginx

Pfad Beschreibung
/etc/nginx/nginx.conf Hauptkonfiguration
/etc/nginx/sites-available/ Verfügbare Konfigurationen
/etc/nginx/sites-enabled/ Aktive Konfigurationen (Symbolic Links)
/etc/nginx/snippets/ Konfigurationsschnipsel
/var/log/nginx/ Zugriffs- und Fehlerprotokolle

PHP-FPM

Pfad (Debian 13) Pfad (Ubuntu 24.04) Beschreibung
/etc/php/8.4/fpm/php.ini /etc/php/8.3/fpm/php.ini PHP-Konfiguration
/etc/php/8.4/fpm/pool.d/www.conf /etc/php/8.3/fpm/pool.d/www.conf Pool-Konfiguration
/run/php/php8.4-fpm.sock /run/php/php8.3-fpm.sock FPM-Socket

Websites

Pfad Beschreibung
/var/www/html/ Standardwebsite
/var/www/monsite.com/html/ Stammverzeichnis einer benutzerdefinierten Website

🔧 Nützliche Befehle

Serviceverwaltung

# Nginx
sudo systemctl start|stop|restart|reload|status nginx

# PHP-FPM (Debian 13)
sudo systemctl start|stop|restart|status php8.4-fpm

# PHP-FPM (Ubuntu 24.04)
sudo systemctl start|stop|restart|status php8.3-fpm

Tests und Diagnosen

# Nginx-Konfiguration testen
sudo nginx -t

# PHP-FPM-Konfiguration testen (Debian 13)
sudo php-fpm8.4 -t

# PHP-FPM-Konfiguration testen (Ubuntu 24.04)
sudo php-fpm8.3 -t

# PHP-FPM-Prozesse anzeigen
ps aux | grep php-fpm

# Aktive Verbindungen anzeigen
ss -tlnp | grep -E 'nginx|php'

# Echtzeit-Logs
sudo tail -f /var/log/nginx/error.log

Websiteverwaltung

# Website aktivieren
sudo ln -s /etc/nginx/sites-available/monsite.com /etc/nginx/sites-enabled/

# Website deaktivieren
sudo rm /etc/nginx/sites-enabled/monsite.com

# Liste der aktiven Websites anzeigen
ls -la /etc/nginx/sites-enabled/

🔍 Fehlerbehebung

"502 Bad Gateway"

Ursachen: PHP-FPM funktioniert nicht oder falscher Socket

Lösungen:

# PHP-FPM überprüfen (Version anpassen)
sudo systemctl status php8.4-fpm

# Socket überprüfen
ls -la /run/php/

# PHP-FPM neu starten
sudo systemctl restart php8.4-fpm

"403 Forbidden"

Ursachen: Falsche Berechtigungen

Lösungen:

# Berechtigungen korrigieren
sudo chown -R www-data:www-data /var/www/monsite.com
sudo chmod -R 755 /var/www/monsite.com

"404 Not Found" für PHP-Dateien

Ursachen: Falsche PHP-FPM-Konfiguration

Überprüfungen:

  1. Die Datei existiert
  2. Die Direktive root ist korrekt in Nginx
  3. Der Block location ~ \.php$ ist vorhanden
  4. Der Socket entspricht der installierten PHP-Version

Weiße Seite (PHP nicht ausgeführt)

Ursachen: PHP-FPM nicht mit Nginx verbunden

Lösungen:

# Socket-Version überprüfen
ls /run/php/

# Mit Nginx-Konfiguration vergleichen
grep fastcgi_pass /etc/nginx/sites-enabled/*

📋 Schnellübersicht

Vollständige Installation Debian 13

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

# Nginx
sudo apt install nginx -y

# PHP-FPM 8.4
sudo apt install php8.4-fpm php8.4-cli php8.4-common php8.4-mysql \
php8.4-zip php8.4-gd php8.4-mbstring php8.4-curl php8.4-xml \
php8.4-bcmath php8.4-intl php8.4-opcache -y

# Firewall
sudo ufw allow 'Nginx Full'

# SSL
sudo apt install certbot python3-certbot-nginx -y

Vollständige Installation Ubuntu 24.04

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

# Nginx
sudo apt install nginx -y

# PHP-FPM 8.3
sudo apt install php8.3-fpm php8.3-cli php8.3-common php8.3-mysql \
php8.3-zip php8.3-gd php8.3-mbstring php8.3-curl php8.3-xml \
php8.3-bcmath php8.3-intl php8.3-opcache -y

# Firewall
sudo ufw allow 'Nginx Full'

# SSL
sudo apt install certbot python3-certbot-nginx -y

💡 Best Practices

  1. Immer die Konfiguration testen bevor Sie neu laden: sudo nginx -t

  2. Verwenden Sie separate Virtual Hosts für jede Website

  3. Aktivieren Sie HTTPS mit Let's Encrypt für alle Websites

  4. Überwachen Sie die Protokolle regelmäßig, um Probleme zu erkennen

  5. Sichern Sie Ihre Konfigurationen vor Änderungen

  6. Optimieren Sie PHP-FPM entsprechend den Ressourcen Ihres VPS

  7. Führen Sie regelmäßig Updates durch für Nginx und PHP aus Sicherheitsgründen

  8. Entfernen Sie Testdateien (info.php) nach der Überprüfung