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.
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:
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:
A
@
123.123.123.123
A
www
123.123.123.123
Wenn du IPv6 nutzt, kannst du zusätzlich einen AAAA-Record setzen.
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
80und443geö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
80ein 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
80und443geö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