Vorher überlegen: nginx oder Apache?
Beide erledigen die Aufgabe zuverlässig, die Unterschiede sind im Alltag kleiner als oft behauptet. Kurz gefasst:
- nginx geht sparsamer mit Arbeitsspeicher um und liefert statische Dateien schneller aus. Das macht ihn auf kleinen vServern zur naheliegenden Wahl. Konfiguriert wird zentral,
.htaccess-Dateien kennt nginx nicht. - Apache ist flexibler, wenn du auf
.htaccessangewiesen bist - etwa weil eine Anwendung ihre Rewrite-Regeln so ausliefert. Er belegt dafür mehr Speicher pro Verbindung.
Diese Anleitung nutzt nginx. Wer Apache bevorzugt, ersetzt die Installationsbefehle sinngemäß durch apt install apache2 libapache2-mod-php; Datenbank, Zertifikat und Absicherung bleiben identisch.
Voraussetzung: Der vServer ist eingerichtet und abgesichert. Falls nicht, arbeite zuerst die ersten Schritte und die SSH-Absicherung ab.
Schritt 1: nginx installieren
sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx
Anschließend gibst du die beiden Web-Ports in der Firewall frei:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status
Rufst du jetzt die IP-Adresse deines vServers im Browser auf, erscheint die Standardseite von nginx. Damit steht die Grundlage.
Schritt 2: PHP-FPM einrichten
nginx führt PHP nicht selbst aus, sondern reicht Anfragen an PHP-FPM weiter. Installiere PHP samt der Erweiterungen, die praktisch jede Anwendung braucht:
sudo apt install php-fpm php-mysql php-mbstring php-xml php-curl php-zip php-gd php-intl -y
Prüfe, welche Version installiert wurde - den Wert brauchst du gleich in der nginx-Konfiguration:
php -v
systemctl status php*-fpm --no-pager | head -n 3
Für Anwendungen, die größere Dateien verarbeiten, lohnt sich ein Blick in die PHP-Konfiguration unter /etc/php/VERSION/fpm/php.ini. Typische Anpassungen:
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 120
Nach Änderungen den Dienst neu laden: sudo systemctl reload php*-fpm.
Schritt 3: MariaDB installieren und absichern
sudo apt install mariadb-server -y
sudo mysql_secure_installation
Das Absicherungsskript stellt mehrere Fragen. Sinnvolle Antworten: anonyme Benutzer entfernen (ja), Root-Login aus der Ferne verbieten (ja), Testdatenbank entfernen (ja), Rechtetabellen neu laden (ja).
Danach legst du Datenbank und Benutzer für dein Projekt an:
sudo mariadb
CREATE DATABASE meineapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'meineapp'@'localhost' IDENTIFIED BY 'ein-langes-zufallspasswort';
GRANT ALL PRIVILEGES ON meineapp.* TO 'meineapp'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Wichtig ist das @'localhost': Die Datenbank soll ausschließlich vom Server selbst erreichbar sein, nie direkt aus dem Internet. Ein aus dem Netz erreichbarer Datenbankserver ist eine der häufigsten Ursachen für kompromittierte Systeme.
Schritt 4: Domain auf den vServer zeigen lassen
Bevor du ein Zertifikat beantragen kannst, muss deine Domain auf die IP-Adresse des vServers zeigen. Lege dafür im DNS deiner Domain einen A-Record an:
deinedomain.de. A DEINE-SERVER-IP
www.deinedomain.de. A DEINE-SERVER-IP
Bis die Änderung überall bekannt ist, vergeht je nach TTL zwischen wenigen Minuten und einigen Stunden. Ob sie schon greift, prüfst du mit:
dig +short deinedomain.de
Du hast noch keine Domain? Bei MainHoster.de registrierst du deine Wunsch-Domain inklusive Verwaltung der Nameserver-Einträge.
Schritt 5: Virtual Host anlegen
Ein Virtual Host - bei nginx Server Block genannt - sagt dem Webserver, welche Dateien er für welche Domain ausliefern soll. Lege zuerst das Verzeichnis an:
sudo mkdir -p /var/www/deinedomain.de/html
sudo chown -R www-data:www-data /var/www/deinedomain.de
echo "<h1>Es läuft</h1>" | sudo tee /var/www/deinedomain.de/html/index.html
Dann die Konfiguration:
sudo nano /etc/nginx/sites-available/deinedomain.de
server {
listen 80;
listen [::]:80;
server_name deinedomain.de www.deinedomain.de;
root /var/www/deinedomain.de/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Aktivieren, Konfiguration prüfen, neu laden:
sudo ln -s /etc/nginx/sites-available/deinedomain.de /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Der Befehl nginx -t ist die wichtigste Zeile: Er meldet Syntaxfehler, bevor ein Neustart die Seite offline nimmt. Meldet er einen Fehler beim fastcgi_pass-Pfad, prüfe mit ls /run/php/, wie der Socket auf deinem System tatsächlich heißt.
Schritt 6: Kostenloses SSL-Zertifikat einrichten
HTTPS ist heute Pflicht - für Suchmaschinen, für Browser-Warnungen und schlicht für die Sicherheit deiner Besucher. Zertifikate von Let's Encrypt sind kostenlos und in zwei Befehlen eingerichtet:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d deinedomain.de -d www.deinedomain.de
Certbot fragt nach einer E-Mail-Adresse für Ablaufwarnungen, holt das Zertifikat und passt deine nginx-Konfiguration automatisch an - inklusive Weiterleitung von HTTP auf HTTPS, wenn du das bestätigst.
Die Erneuerung läuft danach automatisch über einen systemd-Timer. Ob er eingerichtet ist, prüfst du so:
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
Der Trockenlauf simuliert die Erneuerung, ohne das echte Zertifikat anzufassen. Läuft er durch, musst du dich nie wieder darum kümmern.
Absichern und im Betrieb halten
Ein paar Punkte, die den Unterschied zwischen "läuft" und "läuft zuverlässig" ausmachen:
- Server-Version verbergen: In
/etc/nginx/nginx.confdie Zeileserver_tokens off;ergänzen. Das verrät Angreifern weniger über deine Version. - Sicherheits-Header setzen:
X-Content-Type-Options,Referrer-PolicyundX-Frame-Optionsgehören in jeden Server Block. Bei HTTPS zusätzlichStrict-Transport-Security. - Automatische Sicherheitsupdates:
unattended-upgradesinstallieren, damit nginx, PHP und MariaDB Patches ohne dein Zutun bekommen. - Logs im Blick behalten:
sudo tail -f /var/log/nginx/error.logist der erste Griff, wenn etwas nicht funktioniert. - Backups einrichten: Dateien und Datenbank-Dumps, auf ein Ziel außerhalb des Servers. Details im Ratgeber Backups einrichten.
Wäre ein Webspace nicht einfacher?
Ehrliche Antwort: In vielen Fällen ja. Wenn du eine WordPress-Seite mit ein paar Mailkonten betreiben willst, nimmt dir ein Webspace mit Plesk genau die Arbeit ab, die dieser Ratgeber beschreibt - inklusive Updates, SSL-Verwaltung und Backup-Manager, ohne dass du dich um Serversicherheit kümmern musst.
Ein eigener Webserver auf dem vServer lohnt sich, sobald du Software installieren willst, die auf einem Webspace nicht läuft, mehrere Dienste bündelst, eigene Caching- oder Proxy-Konstruktionen brauchst oder schlicht lernen willst, wie das alles zusammenspielt. Eine ausführliche Gegenüberstellung findest du im Ratgeber vServer oder Webspace.
Häufige Fragen
vServer für dein Webprojekt
Für eine typische Webseite mit Datenbank reicht der Tarif S, für mehrere parallele Projekte oder einen Online-Shop empfiehlt sich M oder L. Alle Tarife mit NVMe-SSD im RAID 1, unlimitiertem Traffic und Standort Frankfurt am Main.
vServer-Tarife & Preise ansehen