Webserver Sicherheit · 6 min read · Jan 24, 2026

Tipps und Tricks zur Sicherung Ihres Nginx-Webservers

Nginx ist ein Open-Source-, leichtgewichtiger, hochleistungsfähiger und der am schnellsten wachsende Webserver weltweit. Nginx läuft auf Linux, Windows, Mac OS und Solaris-Betriebssystemen. NGINX gewinnt weiterhin an Beliebtheit, was bedeutet, dass immer mehr NGINX-Installationen gesichert werden müssen.

In diesem Tutorial erklären wir einige beliebte Sicherheits-Tipps und Tricks für den Nginx-Server.

Anforderungen

  • Ein Server, der Ubuntu 18.04 oder Debian 9 ausführt.
  • Ein Root-Passwort ist auf Ihrem Server eingerichtet.

Nginx installieren

Zuerst müssen Sie Nginx auf Ihrem System installieren. Sie können es installieren, indem Sie den folgenden Befehl ausführen:

apt-get install nginx -y

Sobald Nginx installiert ist, können Sie den Status von Nginx mit dem folgenden Befehl überprüfen:

systemctl status nginx

Sie sollten die folgende Ausgabe sehen:

? nginx.service - Ein hochleistungsfähiger Webserver und ein Reverse-Proxy-Server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-03-10 02:43:14 UTC; 4min 40s ago
     Docs: man:nginx(8)
  Process: 2271 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 2281 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 2274 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 2285 (nginx)
    Tasks: 2 (limit: 1111)
   CGroup: /system.slice/nginx.service
           ??2285 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??2290 nginx: worker process

Mar 10 02:43:14 ubuntu1804 systemd[1]: Starting Ein hochleistungsfähiger Webserver und ein Reverse-Proxy-Server...
Mar 10 02:43:14 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Mar 10 02:43:14 ubuntu1804 systemd[1]: Started Ein hochleistungsfähiger Webserver und ein Reverse-Proxy-Server.

Nginx aktualisieren

Sie müssen Ihren Nginx-Webserver aktualisieren, da viele Leistungsverbesserungen, neue Funktionen und Sicherheitsfixes hinzugefügt werden. Die meisten modernen Linux-Distributionen werden nicht mit der neuesten Version von Nginx in ihren Standardpaketlisten geliefert. Daher müssen Sie die neueste Version von Nginx über einen Paketmanager aktualisieren. Sie können Ihren Nginx-Webserver mit dem folgenden Befehl aktualisieren:

apt-get update -y  
apt-get install nginx --reinstall -y

Verhindern von Informationsoffenlegung

Zuerst müssen Sie verhindern, dass Nginx seine Versionsinformationen offenlegt.

Standardmäßig zeigt Nginx seinen Namen und seine Version in den HTTP-Headern an.

Sie können dies mit dem folgenden Befehl überprüfen:

curl -I http://localhost

Sie sollten die folgende Ausgabe sehen:

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Sat, 09 Mar 2019 15:28:01 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes

In der obigen Ausgabe sollten Sie die Nginx- und Betriebssystemversion sehen.

Sie können diese Informationen verbergen, indem Sie die Datei /etc/nginx/nginx.conf bearbeiten:

nano /etc/nginx/nginx.conf

Fügen Sie die Zeile server_tokens off innerhalb des HTTP-Konfigurationsabschnitts hinzu:

http {

        ##
        # Grundlegende Einstellungen
        ##
        server_tokens off;

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Nginx-Webserver neu, um die Änderungen anzuwenden:

systemctl restart nginx

Führen Sie nun den Curl-Befehl erneut aus:

curl -I http://localhost

Sie sollten die folgende Ausgabe sehen:

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Mar 2019 15:33:31 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes

IPs vom Zugriff einschränken

Nginx kommt mit einem einfachen Modul namens ngx_http_access_module, um eine bestimmte IP-Adresse zuzulassen oder abzulehnen.

Wenn Sie Nginx von 172.16.0.0/16 zulassen und von anderen Subnetzen ablehnen möchten, öffnen Sie die Datei /etc/nginx/sites-enabled/default:

nano /etc/nginx/sites-enabled/default

Nehmen Sie die folgenden Änderungen im Serverblock vor:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

    allow 172.16.0.0/16;
    deny  all;

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann Nginx neu, um diese Änderungen anzuwenden:

systemctl restart nginx

Versuchen Sie nun, auf Ihren Nginx-Server von einem anderen IP-Adressbereich wie 192.168.0.102 zuzugreifen.

Überprüfen Sie anschließend das Nginx-Protokoll mit dem folgenden Befehl:

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

Sie sollten den Zugriff in der folgenden Ausgabe verweigert bekommen:

2019/03/09 16:13:01 [error] 11589#11589: *1 access forbidden by rule, client: 192.168.0.102, server: _, request: "GET /test/ HTTP/1.1", host: "172.16.0.122"

Nginx mit TLS sichern

TLS (Transport Layer Security) ist der Nachfolger von SSL (Secure Socket Layer). Es bietet stärkeren und effizienteren HTTPS-Schutz und enthält mehr Verbesserungen wie Forward Secrecy, Kompatibilität mit modernen OpenSSL-Verschlüsselungssuiten und HSTS. Dieses Tutorial zeigt, wie man ein selbstsigniertes SSL-Zertifikat in Nginx aktiviert. Wenn Sie stattdessen ein Let’s Encrypt-Zertifikat verwenden möchten, schauen Sie hier: https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/

Zuerst erstellen Sie ein Verzeichnis für SSL mit dem folgenden Befehl:

mkdir /etc/nginx/ssl/

Als nächstes generieren Sie einen Schlüssel und ein Zertifikat mit dem folgenden Befehl:

cd /etc/nginx/ssl/

Zuerst generieren Sie den Schlüssel mit dem folgenden Befehl:

openssl genrsa -aes256 -out nginx.key 1024

Sie sollten die folgende Ausgabe sehen:

Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:

Als nächstes generieren Sie die CSR mit dem folgenden Befehl:

openssl req -new -key nginx.key -out nginx.csr

Geben Sie alle Informationen wie unten gezeigt ein:

Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:
root@ubuntu1804:~# openssl req -new -key nginx.key -out nginx.csr
Enter pass phrase for nginx.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Gujarat
Locality Name (eg, city) []:Junagadh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IT
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:HITESH
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:admin
An optional company name []:IT

Als nächstes signieren Sie das Zertifikat mit dem folgenden Befehl:

openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crt

Sie sollten die folgende Ausgabe sehen:

Signature ok
subject=C = IN, ST = Gujarat, L = Junagadh, O = IT, OU = IT, CN = HITESH, emailAddress = [email protected]
Getting Private key
Enter pass phrase for nginx.key:

Als nächstes öffnen Sie die Standard-virtuelle Host-Datei von Nginx und definieren das Zertifikat:

nano /etc/nginx/sites-enabled/default

Nehmen Sie die folgenden Änderungen vor:

server {
        listen 192.168.0.100:443 ssl;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Nginx-Server neu, um diese Änderungen anzuwenden:

systemctl restart nginx

Verzeichnis mit Passwort schützen

Beim Einrichten eines Nginx-Webservers können Sie auch ein bestimmtes Verzeichnis mit einem Passwort schützen. Dies können Sie mit der .htpasswd-Datei tun.

Um dies zu tun, erstellen Sie die passwd-Datei und fügen Sie den Benutzer mit dem folgenden Befehl hinzu:

mkdir /etc/nginx/.htpasswd  
htpasswd -c /etc/nginx/.htpasswd/passwd admin

Sie sollten die folgende Ausgabe sehen:

New password: 
Re-type new password: 
Adding password for user admin

Als nächstes erstellen Sie ein Testverzeichnis im Nginx-Webstammverzeichnis mit dem folgenden Befehl:

mkdir /var/www/html/test

Als nächstes geben Sie dem Benutzer www-data mit dem folgenden Befehl das Eigentum:

chown -R www-data:www-data /var/www/html/test

Als nächstes öffnen Sie die Standard-virtuelle Host-Datei von Nginx mit dem folgenden Befehl:

nano /etc/nginx/sites-enabled/default

Schützen Sie dann das Testverzeichnis wie unten gezeigt:

        location /test {

auth_basic  "Eingeschränkt";

auth_basic_user_file   /etc/nginx/.htpasswd/passwd;

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den Nginx-Dienst neu, um diese Änderungen anzuwenden:

systemctl restart nginx

Öffnen Sie nun Ihren Webbrowser und geben Sie die URL http://your-server-ip/test ein. Sie werden aufgefordert, Benutzername und Passwort einzugeben, um auf das Testverzeichnis zuzugreifen, wie auf der folgenden Seite gezeigt:

Nginx mit http-Basisauthentifizierung

Herzlichen Glückwunsch! Sie haben Ihren Nginx-Server auf dem Ubuntu 18.04-Server erfolgreich gesichert. Ich hoffe, dies hilft Ihnen, Ihre auf dem Nginx-Webserver gehostete Anwendung zu schützen. Zögern Sie nicht, mich zu fragen, wenn Sie Fragen haben. Für weitere Informationen können Sie auf die Nginx-Sicherheitsdokumentation verweisen.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.