Privatkunde Geschäftskunde

Webserver auf dem vServer einrichtennginx, PHP, MariaDB und kostenloses SSL-Zertifikat

Ein eigener Webserver auf dem vServer gibt dir Kontrolle über jede Einstellung - von den PHP-Limits über die Caching-Strategie bis zur TLS-Konfiguration. Diese Anleitung führt vom leeren System bis zur per HTTPS erreichbaren Seite.

nginxPHP-FPMMariaDBLet's Encrypt45 Minuten

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 .htaccess angewiesen 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.conf die Zeile server_tokens off; ergänzen. Das verrät Angreifern weniger über deine Version.
  • Sicherheits-Header setzen: X-Content-Type-Options, Referrer-Policy und X-Frame-Options gehören in jeden Server Block. Bei HTTPS zusätzlich Strict-Transport-Security.
  • Automatische Sicherheitsupdates: unattended-upgrades installieren, damit nginx, PHP und MariaDB Patches ohne dein Zutun bekommen.
  • Logs im Blick behalten: sudo tail -f /var/log/nginx/error.log ist 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

Zum Testen nicht - der Server ist auch über seine IP-Adresse erreichbar. Für den echten Betrieb brauchst du eine Domain, spätestens für das SSL-Zertifikat: Let's Encrypt stellt keine Zertifikate für nackte IP-Adressen aus. Eine Domain registrierst du bei MainHoster.de ab 6,49 € pro Jahr.

Für eine typische Webseite mit Datenbank und moderatem Besucheraufkommen reicht der Tarif S. Ein Online-Shop, mehrere parallele Projekte oder eine Anwendung mit vielen gleichzeitigen Zugriffen sind ab M besser aufgehoben. Da du jederzeit ohne Datenverlust upgraden kannst, ist ein kleiner Einstieg unproblematisch.

Nein. Zertifikate von Let's Encrypt sind kostenlos und werden von allen gängigen Browsern akzeptiert. Certbot beantragt und erneuert sie automatisch. Du zahlst nur den vServer selbst.

Ja, und das ist einer der Hauptvorteile gegenüber kleinen Webspace-Paketen. Lege je Domain einen eigenen Server Block unter /etc/nginx/sites-available/ an, richte ein eigenes Verzeichnis unter /var/www/ ein und beantrage das Zertifikat mit einem certbot-Aufruf pro Domain. Die Anzahl ist nur durch die Ressourcen deines Tarifs begrenzt.

Fast immer stimmt der Pfad zum PHP-FPM-Socket in der nginx-Konfiguration nicht mit der installierten PHP-Version überein. Prüfe mit "ls /run/php/", wie der Socket tatsächlich heißt, und trage den exakten Namen bei fastcgi_pass ein. Danach "sudo nginx -t" und "sudo systemctl reload nginx".

Technisch ist das auf einem vServer möglich, praktisch aber selten sinnvoll: Control Panels sind ressourcenhungrig und für kleine Tarife überdimensioniert, dazu kommen oft eigene Lizenzkosten. Wer eine grafische Verwaltung möchte, fährt mit unserem Webspace-Angebot in der Regel besser - dort ist Plesk bereits enthalten und wird von uns gepflegt.

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