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:
- Geben Sie Ihre E-Mail-Adresse ein
- Akzeptieren Sie die Bedingungen
- 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:
- Die Datei existiert
- Die Direktive
rootist korrekt in Nginx - Der Block
location ~ \.php$ist vorhanden - 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
-
Immer die Konfiguration testen bevor Sie neu laden:
sudo nginx -t -
Verwenden Sie separate Virtual Hosts für jede Website
-
Aktivieren Sie HTTPS mit Let's Encrypt für alle Websites
-
Überwachen Sie die Protokolle regelmäßig, um Probleme zu erkennen
-
Sichern Sie Ihre Konfigurationen vor Änderungen
-
Optimieren Sie PHP-FPM entsprechend den Ressourcen Ihres VPS
-
Führen Sie regelmäßig Updates durch für Nginx und PHP aus Sicherheitsgründen
-
Entfernen Sie Testdateien (info.php) nach der Überprüfung

