This is an old revision of the document!
Table of Contents
Codeschnipsel für nginx Konfigurationen
Einige nützliche Codeschnipsel für Methoden und Aufgaben mit nginx.
nginx Version nicht senden
server_tokens off;
SSL/TLS erzwingen
# enforce SSL server { listen 80; listen [::]:80; return 301 https://$host$request_uri; }
Mit obigem Code im http{}-Block vor allen anderen server{}-Blöcken wird für alle definierten Hosts, auf die nginx antwortet, Verschlüsselung via https erzwungen. Funktioniert sowohl mit IPv4 als auch IPv6.
Crawler verbieten
# disallow all kind of automated crawlers location /robots.txt { return 200 "User-agent: *\nDisallow: /"; }
Der Code liefert automatisch innerhalb des zugehörigen server{} eine robots.txt zurück, die automatisierte Crawler generell verbietet, ohne dass sich diese Datei auf dem Server selbst befinden muss.
Text anstatt Datei zurückliefern
location / { return 200 "Welcome to this webpage!"; add_header Content-Type text/plain; }
Soll anstelle einer Webseite beispielsweise ein Platzhaltertext zurückgeliefert werden, kann dies mithilfe des passenden Headers umgesetzt werden. In diesem Fall wird die Rückgabe im Fall des Aufrufs des root-Verzeichnisses ausgeben.
Security Header
# Add headers to serve security related headers add_header X-Frame-Options DENY; add_header Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'" always; # enforce TLS on all assets and prevent mixed content warnings add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Permitted-Cross-Domain-Policies none; add_header X-Download-Options noopen; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
Von mir verwendete Header-Instruktionen, die die Sicherheit erhöhen. So wird das Einbinden fremder Seiten/Inhalte via Frames verboten (XSS), CSP-Richtlinien zum sicheren Nachladen von Inhalten gesetzt, https-Verbindungen bei zukünftigen Besuchen erzwungen und mehr.
Reverse Proxy
server { listen 80; listen [::]:80; listen 443; listen [::]:443; server_name domain.tld *.domain.tld example.com; ssl off; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Permitted-Cross-Domain-Policies none; location / { proxy_pass http://192.168.123.123:80$request_uri; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
Server-Block zur Einrichtung von nginx als Reverse Proxy. Dabei wird sowohl IPv4, IPv6, SSL/TLS-Verschlüsselung als auch unverschlüsselte Verbindungen abgedeckt (entsprechende listen-Direktiven). Durch die hinzugefügten Header und ssl off werden serverseitige Absicherungen wie HSTS oder CSP-Richtlinien außer Kraft gesetzt. Die Weiterleitung selbst erfolgt in diesem Fall zu einem lokalen Server, der hinter der IP 192.168.123.123 auf Port 80 hört.
Basisnamen von URIs
# Gets the basename of the original request map $request_uri $request_basename { ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename; } # Gets the basename of the current uri map $uri $basename { ~/(?<captured_basename>[^/]*)$ $captured_basename; }
Mithilfe des map Moduls von nginx können Methoden definiert werden, die den Basisnamen aus einem Request oder der aktuellen URI extrahieren. Maps müssen im http{}-Block definiert werden, wodurch sie mittels Vererbung auch in den server{}-Blöcken zur Verfügung stehen.
