-
Was ist ein VPS?
-
VPS und Sicherheit
-
VPS - Anwendungsfälle
-
VPS bei METANET
-
VPS und Plesk
-
VPS - Einrichtung & Konfiguration
VPS Server von METANET
Finden Sie den Server der zu Ihren Anforderungen passt – jetzt einfach vergleichen.
0. Überblick
- Verwendetes System: Debian 11 64 bit (vServer XXL 2.0)
- Genutzter User: Ich nehme alles als „root“ vor
- Zeitdauer: ca. 5 Minuten
- Schwierigkeit: Einfach. Nur Code kopieren 😉
- Besonderheiten:
- Grundlage ist folgende Anleitung: Traefik Reverseproxy installieren Diese Anleitung muss zuerst ausgeführt werden.
- Die Installation von Docker / Docker Compose wird hier vorausgesetzt.
1. nginx installieren
1.1 Einleitung
nginx (https://www.nginx.com) ist ein sehr beliebter und schneller Webserver. 67% der 10.000 Webseiten mit dem meisten Traffic verwenden ihn. Er wird bei vielen Docker Containern eingesetzt. Hier soll es darum gehen, nginx in einem eigenen Container zu betreiben und seine eigene Webseite (HTML) zu veröffentlichen.
1.2. Vorteile durch den Einsatz des Reverse Proxys Traefik
Durch Traefik habeb Sie verschiedene Vorteile. Traefik stellt zum Beispiel sicher, dass Ihre Webseite mit einem gütltigen Zertifikat betrieben wird. Dies bedeutet, dass Ihre Webseite „verschlüsselt“ ist. Sie müssen sich hierbei nicht um ein Zertifikat kümmern, da Traefik dies automatisch bereitstellt. Ebenfalls ein Vorteil ist, dass Traefik den Verkehr von dem Port 80 (http) automatisch auf den Port 443 (HTTPS, verschlüsselt) umleitet. Diverse Sicherheitsfeatures wie HSTS und sonstiges können Sie bei Traefik ebenfalls aktivieren. Hier (https://doc.traefik.io/traefik/middlewares/http/headers/) finden Sie eine Liste dieser Features (Header). Die Anleitung zur Einrichtung von Traefik finden Sie hier: Traefik Reverseproxy installieren
1.3 Infos zu yml Dateien
Bei yml Dateien ist es sehr wichtig, dass die Zeilen alle richtig eingerückt sind. Die Zeilen MÜSSEN immer mit der Leertaste eingerückt werden. Es dürfen KEINE Tabs enthalten sein. Sie können den nachfolgenden Code immer online „überprüfen“ lassen. Die meisten Fehler entstehen nämlich durch die falsche Formatierung. Ein Dienst zum Überprüfen ist zum Beispiel: https://codebeautify.org/yaml-validator
1.4 Vorbereitung
Diese Anleitung basiert auf dem aktuellen Debian 10 Betriebssystem. nginx werden wir unter Docker realisieren. Dies ermöglicht uns später sehr schnelle Updates und eine schnelle Installation.
Um nginx neben anderen Diensten auf unserem Server betreiben zu können, nutzen wir hier den Reverse Proxy Traefik (siehe oben).
1.4.1 Verzeichnis erstellen
Wir erstellen uns ein neues Verzeichnis, in welchem wir später alle Daten von nginx abspeichen. Dazu geben wir folgendes in der Konsole ein:
mkdir -p /opt/containers/nginx/html
Sie können hier auch ein anderes Verzeichnis verwenden. Sie müssen dann aber die gesamte Anleitung entsprechend anpassen.
1.4.2 docker-compose.yml erstellen
Nun können wir mit der eigentlichen „Installation“ von nginx beginnen. Dazu öffnen Sie folgende Datei:
nano /opt/containers/nginx/docker-compose.yml
Nun kopiert ihr folgenden Code in die Datei. Dieser Code ist unser Bauplan für unseren nginx Container.
version: '2'
services:
nginx:
image: nginx:latest
container_name: nginx
volumes:
- ./html:/usr/share/nginx/html
networks:
- proxy
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx.entrypoints=http"
- "traefik.http.routers.nginx.rule=Host(`nginx.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.middlewares.nginx-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.nginx.middlewares=nginx-https-redirect"
- "traefik.http.routers.nginx-secure.entrypoints=https"
- "traefik.http.routers.nginx-secure.rule=Host(`nginx.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.routers.nginx-secure.tls=true"
- "traefik.http.routers.nginx-secure.tls.certresolver=http"
- "traefik.http.routers.nginx-secure.service=nginx"
- "traefik.http.services.nginx.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.nginx-secure.middlewares=secHeaders@file"
networks:
proxy:
external: true
Nun müssen wir noch einiges anpassen.
1.4.3 Hostname anpassen
Nun müssen Sie noch den Hostnamen anpassen, über welchen später nginx erreichbar sein soll.
Diese beiden Zeilen müssen Sie anpassen.
- "traefik.http.routers.nginx.rule=Host(`nginx.euredomain.de`)"
- "traefik.http.routers.nginx-secure.rule=Host(`nginx.euredomain.de`)"
In meinem Fall also:
- "traefik.http.routers.nginx.rule=Host(`nginx.testbereich.net`)"
- "traefik.http.routers.nginx-secure.rule=Host(`nginx.testbereich.net`)"
Wenn Sie nginx direkt auf Ihrer „Hauptdomain“ betreiben wollen, dann ändern Sie es folgendermassen ab:
"traefik.http.routers.nginx.rule=Host(`www.euredomain.de`,`euredomain.de`)"
"traefik.http.routers.nginx-secure.rule=Host(`www.euredomain.de`,`euredomain.de`)"
2. nginx starten
Geben Sie nun folgendes ein, um Ihren nginx Container zu starten:
docker compose -f /opt/containers/nginx/docker-compose.yml up -d
Beim ersten Start des Containers wird nginx initialisiert. Wenn Sie dann auf Ihre Webseite (z.B. nginx.euredomaind.de) gehen, sollten Sie folgendes sehen.

Dies ist normal, da wir noch keine Webseite erstellt haben.
3. Eigene Webseite zur Verfügung stellen
Nun wollen wir uns eine eigene kleine Webseite erstellen und diese per nginx bereitstellen.
Dazu erstellen wir uns eine neue Datei in dem Verzeichnis „html“. Alle Dateien, welche in diesem Verzeichnis liegen, sind von „aussen“ zugänglich.
nano /opt/containers/nginx/html/index.html
Der Inhalt der index.html ist ein einfaches HTML-Dokument mit der Ausgabe von "Hallo Welt".
Nun müssen Sie die Datei nur noch speichern. Wenn Sie nun auf Ihre Homepage gehen, so sollte es nun so aussehen. Sie brauchen dazu nginx nicht neu zu starten.

4. Mehrere Webseiten auf einem Server zur Verfügung stellen
Durch Traefik können Sie dies sehr einfach realisieren. Dazu führen Sie einfach die Schritte 1.3.1 bis 1.3.3 mehrfach aus. Sie müssen lediglich den Ordner umbenennen, sowie eine andere Domain z.B. nginx2.euredomain.de angeben. Anschliessend starten Sie Ihren nginx Container und Sie haben dann zwei Webseiten online. Wichtig dabei ist noch, dass Sie bei Traefik die Labels immer umbenennen. Jedes Label muss nämlich einmalig sein. Beispiel:
vorher:
- "traefik.http.routers.nginx-php.entrypoints=http"
nachher:
- "traefik.http.routers.nginx-php2.entrypoints=http"
5. nginx um PHP erweitern
Wenn Sie eine Webseite haben, welche php benötigt, so müssen Sie dies noch zusätzlich bereitstellen. Dies geht sehr einfach.
5.1 Verzeichnis erstellen
Wir erstellen uns ein neues Verzeichnis, in welchem wir später alle Daten von nginx + php abspeichen. Dazu geben wir folgendes in der Konsole ein:
mkdir -p /opt/containers/nginx-php/html
Sie können hier auch ein anderes Verzeichnis verwenden. Müssen dann aber die gesamte Anleitung entsprechend anpassen.
5.2 docker-compose.yml erstellen
Nun können wir mit der eigentlichen „Installation“ von nginx + php beginnen. Dazu öffnet ihr folgende Datei:
nano /opt/containers/nginx-php/docker-compose.yml
Nun kopieren SIe folgenden Code in die Datei. Dieser Code ist unser Bauplan für unseren nginx Container.
version: '2'
services:
nginx-php:
image: webdevops/php-nginx:7.4
container_name: nginx-php
volumes:
- ./html:/app
networks:
- proxy
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx-php.entrypoints=http"
- "traefik.http.routers.nginx-php.rule=Host(`nginx-php.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.middlewares.nginx-php-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.nginx-php.middlewares=nginx-php-https-redirect"
- "traefik.http.routers.nginx-php-secure.entrypoints=https"
- "traefik.http.routers.nginx-php-secure.rule=Host(`nginx-php.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.routers.nginx-php-secure.tls=true"
- "traefik.http.routers.nginx-php-secure.tls.certresolver=http"
- "traefik.http.routers.nginx-php-secure.service=nginx-php"
- "traefik.http.services.nginx-php.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.nginx-php-secure.middlewares=secHeaders@file"
networks:
proxy:
external: true
Nun müssen wir noch einiges anpassen.
5.3 Hostname anpassen
Nun müssen Sie noch den Hostnamen anpassen, über welchen später nginx + php erreichbar sein soll.
Diese beiden Zeilen müssen Sie anpassen.
- "traefik.http.routers.nginx-php.rule=Host(`nginx-php.euredomain.de`)"
- "traefik.http.routers.nginx-php-secure.rule=Host(`nginx-php.euredomain.de`)"
In meinem Fall also:
- "traefik.http.routers.nginx-php.rule=Host(`nginx-php.testbereich.net`)"
- "traefik.http.routers.nginx-php-secure.rule=Host(`nginx-php.testbereich.net`)"
Wenn Sie nginx direkt auf Ihrer „Hauptdomain“ betreiben wollt, dann ändern Sie ihr es folgendermassen ab:
"traefik.http.routers.nginx-php.rule=Host(`www.euredomain.de`,`euredomain.de`)"
"traefik.http.routers.nginx-php-secure.rule=Host(`www.euredomain.de`,`euredomain.de`)"
5.4 php Testwebseite erstellen
Um zu testen, ob php korrekt funktioniert, legen wir uns eine Testwebseite an. Dazu geben Sie folgendes ein:
nano /opt/containers/nginx-php/html/index.php
Kopieren nun folgenden Code in die Datei:
<?php
echo phpinfo();
?>
5.5 nging + php Server starten
Nun starten wir unseren Server mit folgendem Befehl:
docker compose -f /opt/containers/nginx-php/docker-compose.yml up -d
Wenn Sie nun auf Ihre Webseite gehen (z.B. nginx-php.euredomain.de) sollten Sie folgendes sehen:

6. Webseite mit Nutzername und Passwort absichern
Hier zeige ich Ihnen, wie Sie Ihre Webseite durch eine einfache Abfrage von Nutzername und Passwort gegen fremde Zugriffe absichern können. Wir unterscheiden hierbei, ob Sie das „root Verzeichnis“ („Hauptseite) oder einen Unterordner (/sicher) absichern möchten. Die Technik hinter beiden Varianten ist identisch, Sie müssen jedoch in verschiedenen Dateien die Änderungen vornehmen. Daher erkläre ich es hier jeweils für sich.
6.1 Hauptseite absichern
In diesem Unterkapitel zeige ich Ihnen, wie Sie Ihre „Haupseite“ wie zum Beispiel euredomain.de oder nginx.euredomain.de absichern können.
6.1.1 Verzeichnis erstellen
Wir erstellen uns ein neues Verzeichnis, in welchem wir später alle Daten von nginx abspeichen. Dazu geben wir folgendes in der Konsole ein:
mkdir -p /opt/containers/nginx-sicher/{html,passwd}
Sie können hier auch ein anderes Verzeichnis verwenden. Müssen dann aber die gesamte Anleitung entsprechend anpassen.
6.1.2 docker-compose.yml erstellen
Nun können wir mit der eigentlichen „Installation“ von nginx beginnen. Dazu öffnen Sie folgende Datei:
nano /opt/containers/nginx-sicher/docker-compose.yml
Nun kopieren Sie folgenden Code in die Datei. Dieser Code ist unser Bauplan für unseren nginx Container.
version: '2'
services:
nginx-sicher:
image: webdevops/php-nginx:7.4
container_name: nginx-sicher
volumes:
- ./passwd:/passwd
- ./html:/app
- ./10-location-root.conf:/opt/docker/etc/nginx/vhost.common.d/10-location-root.conf
networks:
- proxy
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx-sicher.entrypoints=http"
- "traefik.http.routers.nginx-sicher.rule=Host(`nginx-sicher.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.middlewares.nginx-sicher-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.nginx-sicher.middlewares=nginx-sicher-https-redirect"
- "traefik.http.routers.nginx-sicher-secure.entrypoints=https"
- "traefik.http.routers.nginx-sicher-secure.rule=Host(`nginx-sicher.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.routers.nginx-sicher-secure.tls=true"
- "traefik.http.routers.nginx-sicher-secure.tls.certresolver=http"
- "traefik.http.routers.nginx-sicher-secure.service=nginx-sicher"
- "traefik.http.services.nginx-sicher.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.nginx-sicher-secure.middlewares=secHeaders@file"
networks:
proxy:
external: true
Nun müssen wir noch einiges anpassen.
6.1.3 Hostname anpassen
Nun müssen Sie noch den Hostnamen anpassen, über welchen später nginx erreichbar sein soll.
Diese beiden Zeilen müssen Sie anpassen.
- "traefik.http.routers.nginx-sicher.rule=Host(`nginx-sicher.euredomain.de`)"
- "traefik.http.routers.nginx-sicher-secure.rule=Host(`nginx-sicher.euredomain.de`)"
In meinem Fall also:
- "traefik.http.routers.nginx-sicher.rule=Host(`nginx-sicher.testbereich.net`)"
- "traefik.http.routers.nginx-sicher-secure.rule=Host(`nginx-sicher.testbereich.net`)"
Wenn Sie nginx direkt auf Ihrer „Hauptdomain“ betreiben wollen, dann ändern Sie es folgendermassen ab:
"traefik.http.routers.nginx-sicher.rule=Host(`www.euredomain.de`,`euredomain.de`)"
"traefik.http.routers.nginx-sicher-secure.rule=Host(`www.euredomain.de`,`euredomain.de`)"
6.1.4 Beispielwebseite erstellen
Nun legen wir uns noch eine Beispielwebseite an, welche wir später schützen wollen.
nano /opt/containers/nginx-sicher/html/index.php
Kopieren Sie nun folgenden Code in die Datei:
<?php
echo phpinfo();
?>
6.1.5 apache2-utils installieren
Nun installieren wir uns noch ein Programm, welches uns ermöglicht eine Passwortdatei zu erstellen. Geben Sie dazu folgendes ein:
apt-get install apache2-utils
6.1.6 Passwort generieren
Geben Sie folgenden Befehl ein. Bei mir ist „admin“ der Benutzer, welcher angelegt werden soll. Dies können Sie beliebig verändern.
htpasswd -c /opt/containers/nginx-sicher/passwd/.htpasswd admin
Sie sollten nun noch nach einem Kennwort gefragt werden. Geben Sie dies 2x ein.

Anschliessend können wir uns den Inhalt der Datei anschauen. Gebt dazu folgendes ein:
cat /opt/containers/nginx-sicher/passwd/.htpasswd
Bei mir sieht dies jetzt so aus:

6.1.7 nginx Konfiguration anpassen
Nun müssen wir nginx noch sagen, dass er unsere Hauptseite absichern soll. Dazu legen wir uns eine neue Datei an:
nano /opt/containers/nginx-sicher/10-location-root.conf
Inhalt:
location / {
try_files $uri $uri/ /index.php?$query_string;
auth_basic "verboten";
auth_basic_user_file /passwd/.htpasswd;
}
6.1.8 Server starten
Nun können wir unseren Server starten. Gebt dazu folgendes ein:
docker compose -f /opt/containers/nginx-sicher/docker-compose.yml up -d
6.1.9 Passwort Abfrage kontrollieren
Wenn Sie nun auf Ihre Webseite gehen, dann sollte folgendes erscheinen:

Nachdem Sie nun Ihren Nutzernamen und Passwort eingegeben haben, welches Sie in Schritt 7.6 erzeugt haben, sollten Sie Ihre Webseite sehen:

6.2 Unterwebseite absichern
Hier zeige ich Ihnen, wie Sie Unterwebseiten absichern können. In der Theorie ist es genau identisch wie bei der Hauptseite, jedoch muss man etwas in anderen Dateien ändern. Meine Unterseite soll hier „sicher“ heissen. Das können Sie natürlich beliebig anpassen.
6.2.1 Verzeichnis erstellen
Wir erstellen uns ein neues Verzeichnis, in welchem wir später alle Daten von nginx abspeichen. Dazu geben wir folgendes in der Konsole ein:
mkdir -p /opt/containers/nginx-sicher/{html/sicher,passwd}
Sie können hier auch ein anderes Verzeichnis verwenden. Müssen dann aber die gesamte Anleitung entsprechend anpassen.
6.2.2 docker-compose.yml erstellen
Nun können wir mit der eigentlichen „Installation“ von nginx beginnen. Dazu öffnen Sie folgende Datei:
nano /opt/containers/nginx-sicher/docker-compose.yml
Nun kopieren Sie folgenden Code in die Datei. Dieser Code ist unser Bauplan für unseren nginx Container.
version: '2'
services:
nginx-sicher:
image: webdevops/php-nginx:7.4
container_name: nginx-sicher
volumes:
- ./passwd:/passwd
- ./html:/app
- ./vhost.conf:/opt/docker/etc/nginx/vhost.conf
networks:
- proxy
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx-sicher.entrypoints=http"
- "traefik.http.routers.nginx-sicher.rule=Host(`nginx-sicher.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.middlewares.nginx-sicher-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.nginx-sicher.middlewares=nginx-sicher-https-redirect"
- "traefik.http.routers.nginx-sicher-secure.entrypoints=https"
- "traefik.http.routers.nginx-sicher-secure.rule=Host(`nginx-sicher.euredomain.de`)" # Hier eure URL eingeben #
- "traefik.http.routers.nginx-sicher-secure.tls=true"
- "traefik.http.routers.nginx-sicher-secure.tls.certresolver=http"
- "traefik.http.routers.nginx-sicher-secure.service=nginx-sicher"
- "traefik.http.services.nginx-sicher.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.nginx-sicher-secure.middlewares=secHeaders@file"
networks:
proxy:
external: true
Nun müssen wir noch einiges anpassen.
6.2.3 Hostname anpassen
Nun müssen Sie noch den Hostnamen anpassen, über welchen später nginx erreichbar sein soll.
Diese beiden Zeilen müssen Sie anpassen.
- "traefik.http.routers.nginx-sicher.rule=Host(`nginx-sicher.euredomain.de`)"
- "traefik.http.routers.nginx-sicher-secure.rule=Host(`nginx-sicher.euredomain.de`)"
In meinem Fall also:
- "traefik.http.routers.nginx-sicher.rule=Host(`nginx-sicher.testbereich.net`)"
- "traefik.http.routers.nginx-sicher-secure.rule=Host(`nginx-sicher.testbereich.net`)"
Wenn Sie nginx direkt auf Ihrer „Hauptdomain“ betreiben wollt, dann ändert ihr es folgendermassen ab:
"traefik.http.routers.nginx-sicher.rule=Host(`www.euredomain.de`,`euredomain.de`)"
"traefik.http.routers.nginx-sicher-secure.rule=Host(`www.euredomain.de`,`euredomain.de`)"
6.2.4 Beispielwebseiten erstellen
Nun legen wir uns noch zwei Webseiten an. Die erste ist unsere Hauptseite:
nano /opt/containers/nginx-sicher/html/index.php
Kopieren Sie nun folgenden Code in die Datei:
<?php
echo phpinfo();
?>
Nun legen wir uns noch unsere „sichere“ Seite an.
nano /opt/containers/nginx-sicher/html/sicher/index.html
Inhalt der index.html kann zum Testen ein einfaches HTML-Grundgerüst sein.
6.2.5 apache2-utils installieren
Nun installieren wir uns noch ein Programm, welches uns ermöglicht eine Passwortdatei zu erstellen. Gebt dazu folgendes ein:
apt-get install apache2-utils
6.2.6 Passwort generieren
Geben Sie folgenden Befehl ein. Bei mir ist „admin“ der Benutzer, welcher angelegt werden soll. Dies können Sie beliebig verändern.
htpasswd -c /opt/containers/nginx-sicher/passwd/.htpasswd admin
Sie sollten nun noch nach einem Kennwort gefragt werden. Geben Sie dies 2x ein.

Anschliessend können wir uns den Inhalt der Datei anschauen. Geben Sie dazu folgendes ein:
cat /opt/containers/nginx-sicher/passwd/.htpasswd
Bei mir sieht dies jetzt so aus:

6.2.7 nginx Konfiguration anpassen
Nun müssen wir nginx noch sagen, dass er unsere Haupseite absichern soll. Dazu legen wir uns eine neue Datei an:
nano /opt/containers/nginx-sicher/vhost.conf
Inhalt:
server {
listen 80 default_server;
server_name _ *.vm docker;
root "/app";
index index.php;
location /sicher {
index index.php index.html;
auth_basic "verboten";
auth_basic_user_file /passwd/.htpasswd;
}
include /opt/docker/etc/nginx/vhost.common.d/*.conf;
}
##############
# SSL
##############
server {
listen 443 default_server;
server_name _ *.vm docker;
root "/app";
index index.php;
location /sicher {
index index.php index.html;
auth_basic "verboten";
auth_basic_user_file /passwd/.htpasswd;
}
include /opt/docker/etc/nginx/vhost.common.d/*.conf;
include /opt/docker/etc/nginx/vhost.ssl.conf;
}
6.2.8 Server starten
Nun können wir unseren Server starten. Geben Sie dazu folgendes ein:
docker compose -f /opt/containers/nginx-sicher/docker-compose.yml up -d
6.2.9 Passwortabfrage
Wenn Sie nun auf Ihre Hauptwebseite gehen, dann sollte folgendes erscheinen:

Wenn Sie nun auf Ihre Unterwebseite „sicher“ gehen, dann sollte folgendes erscheinen:

Nachdem Sie nun Ihren Nutzernamen und Passwort eingegeben haben, welches Sie in Schritt 7.6 erzeugt habt, sollten Sie Ihre Webseite sehen:

VPS Server von METANET
Finden Sie den Server der zu Ihren Anforderungen passt – jetzt einfach vergleichen.