For the complete documentation index, see llms.txt. This page is also available as Markdown.

Webserver installieren

Mit einem Webserver kannst du Webseiten, Webanwendungen oder APIs auf deinem KVM-Server bereitstellen.

In diesem Artikel erklären wir dir, wie du unter Linux einen einfachen Webserver installierst, welche Unterschiede es zwischen Apache und Nginx gibt und welche Schritte nach der Installation wichtig sind.

Voraussetzungen

Du benötigst:

  • einen KVM-Server mit Linux

  • Root-Zugriff oder einen Benutzer mit sudo-Rechten

  • eine aktive SSH-Verbindung

  • Grundkenntnisse im Umgang mit der Konsole

  • optional eine Domain, die auf deinen Server zeigt

Für die Beispiele verwenden wir Debian oder Ubuntu. Viele Schritte funktionieren ähnlich auch auf anderen Linux-Distributionen, die Befehle können dort aber abweichen.

Was ist ein Webserver?

Ein Webserver ist ein Dienst, der Webseiten und Webinhalte ausliefert.

Wenn ein Besucher deine Domain im Browser öffnet, fragt der Browser deinen Server nach der Webseite. Der Webserver nimmt diese Anfrage an und liefert die passenden Dateien zurück.

Typische Webserver sind:

  • Apache

  • Nginx

Beide können Webseiten ausliefern. Welcher Webserver besser passt, hängt vom Einsatzzweck und deinen Anforderungen ab.

Apache oder Nginx?

Apache und Nginx sind die bekanntesten Webserver unter Linux.

Webserver
Beschreibung

Apache

Sehr verbreitet, flexibel, viele Anleitungen, gute Unterstützung für .htaccess

Nginx

Schnell, ressourcenschonend, häufig für moderne Webanwendungen und Reverse Proxy genutzt

Wenn du eine klassische Webseite oder WordPress betreiben möchtest, ist Apache oft ein einfacher Einstieg.

Wenn du eine performante Webseite, eine API oder einen Reverse Proxy betreiben möchtest, ist Nginx häufig eine gute Wahl.

System aktualisieren

Bevor du einen Webserver installierst, solltest du dein System aktualisieren.

Melde dich per SSH auf deinem Server an und führe aus:

apt update

Danach installierst du verfügbare Updates:

apt upgrade

Wenn wichtige Systemupdates installiert wurden, kann ein Neustart sinnvoll sein:

reboot

Apache installieren

Apache installierst du unter Debian oder Ubuntu mit folgendem Befehl:

apt install apache2

Nach der Installation wird Apache normalerweise automatisch gestartet.

Prüfe den Status:

systemctl status apache2

Wenn Apache läuft, kannst du die IP-Adresse deines Servers im Browser öffnen.

Beispiel:

http://123.123.123.123

Wenn alles funktioniert, erscheint die Standardseite von Apache.

Apache starten, stoppen und neustarten

Apache starten:

systemctl start apache2

Apache stoppen:

systemctl stop apache2

Apache neustarten:

systemctl restart apache2

Apache neu laden, ohne aktive Verbindungen hart zu beenden:

systemctl reload apache2

Apache beim Systemstart automatisch starten:

systemctl enable apache2

Nginx installieren

Nginx installierst du unter Debian oder Ubuntu mit folgendem Befehl:

apt install nginx

Nach der Installation wird Nginx normalerweise automatisch gestartet.

Prüfe den Status:

systemctl status nginx

Wenn Nginx läuft, kannst du die IP-Adresse deines Servers im Browser öffnen.

Beispiel:

http://123.123.123.123

Wenn alles funktioniert, erscheint die Standardseite von Nginx.

Nginx starten, stoppen und neustarten

Nginx starten:

systemctl start nginx

Nginx stoppen:

systemctl stop nginx

Nginx neustarten:

systemctl restart nginx

Nginx neu laden, ohne aktive Verbindungen hart zu beenden:

systemctl reload nginx

Nginx beim Systemstart automatisch starten:

systemctl enable nginx

Nicht Apache und Nginx gleichzeitig auf Port 80 betreiben

Apache und Nginx nutzen standardmäßig beide Port 80 für HTTP und Port 443 für HTTPS.

Wenn beide Webserver gleichzeitig auf denselben Ports laufen, kann einer der Dienste nicht starten.

Typische Fehlermeldung:

Address already in use

Entscheide dich deshalb am Anfang für einen Webserver.

Wenn du von Apache zu Nginx wechseln möchtest, stoppe Apache zuerst:

systemctl stop apache2

Optional Apache deaktivieren:

systemctl disable apache2

Wenn du von Nginx zu Apache wechseln möchtest, stoppe Nginx zuerst:

systemctl stop nginx

Optional Nginx deaktivieren:

systemctl disable nginx

Firewall öffnen

Damit deine Webseite von außen erreichbar ist, müssen die passenden Ports freigegeben sein.

Für Webseiten brauchst du meistens:

Port
Zweck

80

HTTP

443

HTTPS

Wenn du UFW verwendest, kannst du HTTP und HTTPS freigeben.

HTTP freigeben:

ufw allow 80/tcp

HTTPS freigeben:

ufw allow 443/tcp

Status prüfen:

ufw status

Wenn UFW noch nicht aktiviert ist, kannst du sie aktivieren:

ufw enable

Wichtig: Stelle sicher, dass SSH erlaubt ist, bevor du die Firewall aktivierst. Sonst kannst du dich möglicherweise nicht mehr per SSH verbinden.

SSH erlauben:

ufw allow 22/tcp

Webverzeichnis verstehen

Webseiten-Dateien liegen häufig unter:

/var/www/

Bei Apache ist das Standardverzeichnis oft:

/var/www/html

Bei Nginx ebenfalls häufig:

/var/www/html

Wenn du eine eigene Webseite betreiben möchtest, kannst du für jede Domain ein eigenes Verzeichnis anlegen.

Beispiel:

/var/www/deinedomain.de

Verzeichnis erstellen:

mkdir -p /var/www/deinedomain.de

Eine einfache Testdatei erstellen:

nano /var/www/deinedomain.de/index.html

Beispielinhalt:

Meine Webseite funktioniert.

Rechte für Webdateien setzen

Die Dateien sollten vom Webserver gelesen werden können.

Für einfache Webseiten kannst du häufig folgende Rechte verwenden:

chown -R www-data:www-data /var/www/deinedomain.de

find /var/www/deinedomain.de -type d -exec chmod 755 {} \;

find /var/www/deinedomain.de -type f -exec chmod 644 {} \;

www-data ist auf Debian und Ubuntu der typische Benutzer, unter dem Apache oder Nginx laufen.

Domain auf den Server zeigen lassen

Damit deine Webseite über eine Domain erreichbar ist, muss die Domain auf die IP-Adresse deines KVM-Servers zeigen.

Dafür wird im DNS ein A-Record gesetzt.

Beispiel:

Typ
Name
Ziel

A

@

123.123.123.123

A

www

123.123.123.123

Wenn du IPv6 nutzt, kannst du zusätzlich einen AAAA-Record setzen.

Typ
Name
Ziel

AAAA

@

IPv6-Adresse deines Servers

AAAA

www

IPv6-Adresse deines Servers

DNS-Änderungen sind nicht immer sofort aktiv. Es kann einige Minuten bis mehrere Stunden dauern, bis die Änderung überall übernommen wurde.

Apache Virtual Host einrichten

Ein Virtual Host legt fest, welche Webseite für welche Domain ausgeliefert wird.

Erstelle eine neue Konfigurationsdatei:

nano /etc/apache2/sites-available/deinedomain.de.conf

Beispielkonfiguration:

<VirtualHost *:80> ServerName deinedomain.de ServerAlias www.deinedomain.de DocumentRoot /var/www/deinedomain.de ErrorLog ${APACHE_LOG_DIR}/deinedomain_error.log CustomLog ${APACHE_LOG_DIR}/deinedomain_access.log combined </VirtualHost>

Aktiviere die Webseite:

a2ensite deinedomain.de.conf

Deaktiviere optional die Standardseite:

a2dissite 000-default.conf

Konfiguration prüfen:

apache2ctl configtest

Apache neu laden:

systemctl reload apache2

Nginx Server Block einrichten

Bei Nginx heißt die Domain-Konfiguration meist Server Block.

Erstelle eine neue Konfigurationsdatei:

nano /etc/nginx/sites-available/deinedomain.de

Beispielkonfiguration:

server { listen 80; server_name deinedomain.de www.deinedomain.de; root /var/www/deinedomain.de; index index.html index.htm; location / { try_files $uri $uri/ =404; } }

Aktiviere die Webseite:

ln -s /etc/nginx/sites-available/deinedomain.de /etc/nginx/sites-enabled/

Konfiguration prüfen:

nginx -t

Nginx neu laden:

systemctl reload nginx

PHP installieren

Viele Webseiten und Anwendungen benötigen PHP. Das gilt zum Beispiel für WordPress, viele CMS-Systeme und ältere Webanwendungen.

PHP für Apache installieren:

apt install php libapache2-mod-php

Apache neu starten:

systemctl restart apache2

PHP für Nginx installieren:

apt install php-fpm

Nginx muss danach so konfiguriert werden, dass PHP-Anfragen an PHP-FPM weitergegeben werden.

Datenbank installieren

Viele Webanwendungen benötigen eine Datenbank.

Häufig wird MariaDB verwendet.

MariaDB installieren:

apt install mariadb-server

Dienst starten:

systemctl start mariadb

Dienst beim Systemstart aktivieren:

systemctl enable mariadb

Sicherheitsassistent starten:

mysql_secure_installation

Mit MariaDB verbinden:

mysql

SSL-Zertifikat mit Let's Encrypt einrichten

Für Webseiten solltest du HTTPS verwenden.

HTTPS schützt die Verbindung zwischen Besucher und Webseite.

Für kostenlose SSL-Zertifikate kannst du Let's Encrypt mit Certbot verwenden.

Certbot installieren:

apt install certbot

Für Apache:

apt install python3-certbot-apache

Zertifikat für Apache einrichten:

certbot --apache

Für Nginx:

apt install python3-certbot-nginx

Zertifikat für Nginx einrichten:

certbot --nginx

Folge danach den Anweisungen im Terminal.

Automatische Zertifikatserneuerung prüfen

Let's Encrypt Zertifikate laufen regelmäßig ab und müssen erneuert werden.

Certbot richtet normalerweise eine automatische Erneuerung ein.

Du kannst die Erneuerung testen:

certbot renew --dry-run

Wenn dieser Test erfolgreich ist, sollte die automatische Erneuerung funktionieren.

Logs prüfen

Wenn deine Webseite nicht funktioniert, sind Logs sehr wichtig.

Apache Logs:

/var/log/apache2/access.log

/var/log/apache2/error.log

Nginx Logs:

/var/log/nginx/access.log

/var/log/nginx/error.log

Logs live anzeigen:

tail -f /var/log/apache2/error.log

oder:

tail -f /var/log/nginx/error.log

Häufige Probleme

Webseite ist nicht erreichbar

Prüfe:

  • läuft Apache oder Nginx?

  • zeigt die Domain auf die richtige IP-Adresse?

  • sind Port 80 und 443 geöffnet?

  • blockiert die Firewall?

  • ist die Webserver-Konfiguration korrekt?

  • ist der Server grundsätzlich erreichbar?

Status prüfen:

systemctl status apache2

oder:

systemctl status nginx

Port 80 ist bereits belegt

Wenn Apache oder Nginx nicht startet, kann Port 80 bereits von einem anderen Dienst genutzt werden.

Prüfen:

ss -tulpen

Typische Ursache:

  • Apache läuft bereits

  • Nginx läuft bereits

  • ein anderes Panel nutzt Port 80

  • ein Docker-Container nutzt Port 80

403 Forbidden

Die Meldung 403 Forbidden bedeutet, dass der Webserver die Anfrage verstanden hat, aber keinen Zugriff auf die Dateien erlaubt.

Mögliche Ursachen:

  • falsche Dateirechte

  • falscher Besitzer

  • fehlende Index-Datei

  • falsches Webverzeichnis

  • Zugriff durch Konfiguration blockiert

Prüfe, ob eine Datei wie index.html oder index.php im Webverzeichnis liegt.

404 Not Found

Die Meldung 404 Not Found bedeutet, dass die angeforderte Seite nicht gefunden wurde.

Mögliche Ursachen:

  • Datei existiert nicht

  • falscher DocumentRoot

  • falscher Pfad

  • Rewrite-Regeln fehlen

  • Domain zeigt auf falsche Webseite

502 Bad Gateway

Die Meldung 502 Bad Gateway tritt häufig bei Nginx in Verbindung mit PHP-FPM oder Reverse Proxy auf.

Mögliche Ursachen:

  • PHP-FPM läuft nicht

  • falscher Socket oder Port

  • Anwendung ist abgestürzt

  • Backend-Dienst ist nicht erreichbar

PHP-FPM Status prüfen:

systemctl status php*-fpm

SSL funktioniert nicht

Prüfe:

  • zeigt die Domain bereits auf den Server?

  • sind Port 80 und 443 geöffnet?

  • ist Certbot erfolgreich durchgelaufen?

  • ist die Webserver-Konfiguration gültig?

  • wurde der Webserver neu geladen?

Apache prüfen:

apache2ctl configtest

Nginx prüfen:

nginx -t

Sicherheit nach der Installation

Nach der Installation solltest du einige grundlegende Sicherheitsmaßnahmen umsetzen:

  • System regelmäßig aktualisieren

  • nur benötigte Ports öffnen

  • HTTPS aktivieren

  • sichere Passwörter verwenden

  • Dateirechte prüfen

  • nicht benötigte Standardseiten entfernen

  • Webanwendungen aktuell halten

  • Backups erstellen

  • Logs regelmäßig prüfen

Wenn du WordPress oder ein anderes CMS nutzt, halte auch Plugins, Themes und Erweiterungen aktuell.

Support kontaktieren

Wenn dein Webserver nicht funktioniert, kontaktiere den Support mit möglichst genauen Angaben.

Hilfreich sind:

  • Betriebssystem

  • verwendeter Webserver: Apache oder Nginx

  • Domain

  • Server-IP

  • genaue Fehlermeldung

  • Auszug aus den Logs

  • welche Schritte du bereits durchgeführt hast

  • ob die Webseite über IP-Adresse erreichbar ist

  • ob die Domain bereits auf den Server zeigt

Sende niemals Passwörter, private SSH-Keys oder andere geheime Zugangsdaten an den Support.

Zuletzt aktualisiert