<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Nginx_Absichern_und_Betreiben</id>
	<title>Nginx Absichern und Betreiben - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Nginx_Absichern_und_Betreiben"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Nginx_Absichern_und_Betreiben&amp;action=history"/>
	<updated>2026-11-02T23:15:22Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Nginx_Absichern_und_Betreiben&amp;diff=74066&amp;oldid=prev</id>
		<title>Thomas.will@claude: Neue Seite: Hardening, Logging, Performance, HA</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Nginx_Absichern_und_Betreiben&amp;diff=74066&amp;oldid=prev"/>
		<updated>2026-10-31T14:14:18Z</updated>

		<summary type="html">&lt;p&gt;Neue Seite: Hardening, Logging, Performance, HA&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Betrieb absichern: Security Hardening, Authentifizierung, Logging, Performance und Hochverfügbarkeit. Baut auf [[Nginx Grundkonfiguration]] und [[Nginx Reverse Proxy und Load Balancing]] auf.&lt;br /&gt;
&lt;br /&gt;
== Security Hardening ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server_tokens off;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbirgt die Nginx-Version in Fehlerseiten und im &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt;-Header – erschwert gezieltes Suchen nach bekannten Schwachstellen einer bestimmten Version. Ersetzt kein Patchen: Nginx und Betriebssystem trotzdem aktuell halten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location /internal/ {&lt;br /&gt;
    deny all;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sperrt einen Pfad komplett, unabhängig von jeder Authentifizierung.&lt;br /&gt;
&lt;br /&gt;
=== Security-Header ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
add_header X-Content-Type-Options nosniff always;&lt;br /&gt;
add_header Referrer-Policy strict-origin-when-cross-origin always;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Strict-Transport-Security&amp;lt;/code&amp;gt; (HSTS) erst setzen, wenn wirklich &amp;lt;b&amp;gt;alle&amp;lt;/b&amp;gt; betroffenen Hosts dauerhaft über HTTPS erreichbar sind – sonst sperrt sich der Browser selbst von einem eventuell nötigen HTTP-Fallback aus, und das lässt sich nicht kurzfristig zurücknehmen.&lt;br /&gt;
&lt;br /&gt;
== Authentifizierung und Zugriffsschutz ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Auth ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
htpasswd -c /etc/nginx/.htpasswd admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Paket &amp;lt;code&amp;gt;apache2-utils&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;httpd-tools&amp;lt;/code&amp;gt;, je nach Distribution)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location /admin/ {&lt;br /&gt;
    auth_basic &amp;quot;Restricted&amp;quot;;&lt;br /&gt;
    auth_basic_user_file /etc/nginx/.htpasswd;&lt;br /&gt;
    proxy_pass http://127.0.0.1:3000;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passwort-Datei außerhalb des Webroots halten, Basic Auth nur über HTTPS einsetzen – sonst gehen die Zugangsdaten im Klartext über die Leitung.&lt;br /&gt;
&lt;br /&gt;
=== IP-Beschränkung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location / {&lt;br /&gt;
    allow 192.0.2.0/24;&lt;br /&gt;
    deny all;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinter einem vorgeschalteten Proxy vorher sicherstellen, dass die echte Client-IP überhaupt ankommt (siehe [[Nginx Reverse Proxy und Load Balancing]]) – sonst greift die Beschränkung auf die falsche, immer gleiche Proxy-Adresse.&lt;br /&gt;
&lt;br /&gt;
== Logging und Monitoring ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
access_log /var/log/nginx/access.log;&lt;br /&gt;
error_log /var/log/nginx/error.log warn;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tail -f /var/log/nginx/error.log&lt;br /&gt;
sudo journalctl -u nginx -n 50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nützliche Variablen in Log-Formaten ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Variable !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$remote_addr&amp;lt;/code&amp;gt; || Client-IP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$request&amp;lt;/code&amp;gt; || komplette HTTP-Anfragezeile&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$status&amp;lt;/code&amp;gt; || HTTP-Statuscode der Antwort&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$request_time&amp;lt;/code&amp;gt; || Verarbeitungszeit insgesamt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$upstream_response_time&amp;lt;/code&amp;gt; || Zeit, die allein das Backend gebraucht hat&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== stub_status ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location = /nginx_status {&lt;br /&gt;
    stub_status;&lt;br /&gt;
    allow 127.0.0.1;&lt;br /&gt;
    deny all;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Braucht das Modul &amp;lt;code&amp;gt;ngx_http_stub_status_module&amp;lt;/code&amp;gt; (in den meisten Distributionspaketen bereits enthalten) und sollte – wie hier gezeigt – nicht öffentlich erreichbar sein.&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
worker_processes auto;&lt;br /&gt;
events {&lt;br /&gt;
    worker_connections 1024;&lt;br /&gt;
}&lt;br /&gt;
sendfile on;&lt;br /&gt;
keepalive_timeout 65s;&lt;br /&gt;
gzip on;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;worker_connections&amp;lt;/code&amp;gt; zählt auch Verbindungen zum Backend mit, nicht nur zum Client – das tatsächliche Limit hängt zusätzlich vom Betriebssystem und offenen Dateideskriptoren (&amp;lt;code&amp;gt;ulimit&amp;lt;/code&amp;gt;) ab. Beim Tunen immer eine Einstellung nach der anderen ändern und mit realistischer Last messen (zuerst eine Baseline, dann vergleichen), nicht mehrere Werte gleichzeitig.&lt;br /&gt;
&lt;br /&gt;
== Hochverfügbarkeit ==&lt;br /&gt;
&lt;br /&gt;
Mehrere Backends hinter einer Nginx (siehe [[Nginx Reverse Proxy und Load Balancing]]) beseitigen nicht den einzelnen Nginx-Proxy selbst als Ausfallpunkt. Für echte Redundanz: zwei Nginx-Instanzen plus ein externer Mechanismus davor (DNS-Round-Robin oder eine virtuelle IP), und bei zustandsbehafteten Anwendungen ein gemeinsamer Session-Speicher (z. B. Redis) statt lokaler Sitzungen.&lt;br /&gt;
&lt;br /&gt;
== Vor dem Produktiveinsatz ==&lt;br /&gt;
&lt;br /&gt;
* DNS, Backend-Erreichbarkeit, Firewall-Regeln und Zertifikat vorher geprüft&lt;br /&gt;
* Konfiguration vor jeder Änderung gesichert, &amp;lt;code&amp;gt;nginx -t&amp;lt;/code&amp;gt; vor jedem &amp;lt;code&amp;gt;reload&amp;lt;/code&amp;gt;&lt;br /&gt;
* Admin-Zugriff eingeschränkt, Rate Limits gesetzt&lt;br /&gt;
* Monitoring für Latenz, 4xx/5xx-Quote und Zertifikatsablauf eingerichtet&lt;br /&gt;
* Rollback getestet, bevor er wirklich gebraucht wird&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://nginx.org/en/docs/ offizielle Nginx-Dokumentation]&lt;br /&gt;
* [[Nginx Grundlagen]]&lt;br /&gt;
* [[Nginx Grundkonfiguration]]&lt;br /&gt;
* [[Nginx Reverse Proxy und Load Balancing]]&lt;/div&gt;</summary>
		<author><name>Thomas.will@claude</name></author>
	</entry>
</feed>