nginx als Windows-Version untauglich

Viele kennen nginx als zuverlässigen, stabilen und einfach zu installierenden Webserver. Es gibt diese Software nicht nur für Linux, sondern auch für Windows.

Leider musste ich in eigenen Tests feststellen, dass die Windows-Version für den Betrieb in einem deutschsprachigen Umfeld bei der Verwendung des Befehls autoindex * untauglich ist.

Der Grund ist einfach:
nginx kann nicht mit Umlauten wie äöü in Pfadnamen umgehen!

* Den Befehl autoindex verwendet man, wenn man eine einfache Auflistung des Verzeichnisinhaltes darstellen will.

Update 03.06.2023:
Diese Aussage stimmt seit der nginx-Version v1.24 nicht mehr!
Details siehe Updates am Schluss dieses Artikels.

Schritte um das Problem selber festzustellen:
1.) nginx in der Windows-Version von nginx.org (nicht nginx.com!) herunterladen, z.B. https://nginx.org/download/nginx-1.21.6.zip

2.) Das Archiv in ein beliebiges Verzeichnis auspacken, z.B. \Downloads\nginx-1.21.6

3.) Eine kleine zusätzliche Testverzeichnis-Struktur anlegen, z.B. C:\Temp\nginx\Blaetterwald und C:\Temp\nginx\Blätterwald (Pfad also einmal mit “ae” und einmal mit “ä”). Nach Belieben irgendwelche Dateien in diese beiden Pfade kopieren.

4.) Im ngnix-Verzeichnis das Unterverzeichnis \conf und darin die Datei nginx.conf in einem Texteditor öffnen

5.) Folgende sogenannte location hinter den bestehenden location-Einträgen (im Abschnitt http -> server) hinzufügen (als Windows-User auf die seltsamen Vorwärts-Slashes achten!)

location /Test {
alias C:/Temp/nginx/;
autoindex on;
}

6.) nginx starten und im Browser http://localhost aufrufen, die Willkommensmeldung von nginx erscheint, somit läuft der Webserver

7.) Hinter localhost hängt man nun manuell /Test an, es sollte folgendes angezeigt werden:

8.) Bis hierher funktioniert alles einwandfrei. Klickt man nun auf den esten Eintrag Blaetterwald, erscheint erwartungsgemäss entsprechend vorhandener Inhalt, z.B.

9.) Für den erfolgreichen Aufruf von Blaetterwald findet man im Verzeichnis \logs in der Datei access.log folgende Zeile:

127.0.0.1 – – [08/Feb/2022:09:18:56 +0100] “GET /Test/ HTTP/1.1” 200 394 “http://localhost/Test/Blaetterwald/” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36”

10.) Aber was passiert, wenn man auf den zweiten Eintrag Blätterwald klickt?

Fehlermeldung in nginx, findet man in \logs\error.log

11.) Für die Fehlermeldung aus Blätterwald findet man im Verzeichnis \logs in der Datei error.log folgende Zeile:

2022/02/08 08:48:59 [crit] 15012#15868: *1 GetFileAttributesEx() “C:/Temp/nginx//Blätterwald” failed (1113: Für das Unicode-Zeichen ist kein zugeordnetes Zeichen in der Mehrbytecodepage vorhanden), client: 127.0.0.1, server: localhost, request: “GET /Test/Bl%E4tterwald/ HTTP/1.1”, host: “localhost”, referrer: “http://localhost/Test/”

In der Windows-Version gibt es anscheinend keine korrekte Umsetzung für Umlaute oder sonstige Sonderzeichen im Zusammenhang mit autoindex. Man findet zwar ein paar offizielle Einschränkungen, aber nichts weist auf diesen gravierenden Mangel hin.

Es gibt zudem ein über 8 Jahre altes – immer noch offenes – Ticket für diesen Mangel:
https://trac.nginx.org/nginx/ticket/458. Dieses Ticket enthält sogar einen Patch. Der wurde aber aus wenig hilfreichen Gründen mit “needs more work” ignoriert.

Zusammenfassung:
Der Befehl autoindex von nginx kann in der Windows-Version keine Pfade mit Umlauten oder Sonderzeichen anzeigen. Das ist seit 8 Jahren ungelöst.
Stand 08.02.2022 und nginx-1.21.6.zip.

Update am 03.06.2023 (17.30 Uhr):
Ein (anonymer) Kommentarschreiber hat gemeldet, dass die deutschen Umlaute seit der nginx-Version 1.23.4 funktionieren sollen.
Das habe ich eben getestet. Mit durchzogenem Erfolg.
Zwar kann man in der getesteten nginx-Version 1.25.0 für Windows tatsächlich neu auch Verzeichnisse mit Umlauten wie \Blätterwald aufrufen. Aber die Umlaute sehen leider immer noch be…scheiden aus, z.B. für eine Test-Datei namens
Wie sähe mein öliger Dateiname ähnlich ÄÖÜ aus.txt

Update am 03.06.2023 (17.45 Uhr):
Folgender Eintrag in der Datei nginx.conf scheint endlich die Darstellung so zu zeigen, wie man es als Standard erwarten würde:
Wie oben unter Punkt 4.) und 5.) beschrieben, ergänzt man zusätzlich unter http und server
charset UTF-8;
(in meiner Standard nginx.conf gibt es eine deaktiverte Zeile #charset koi8-r;)

Beendet man dann die nginx.exe im Taskmanager und startet nginx.exe neu, dann sieht es endlich wie gewünscht aus:

Also kann man als Windows-User festhalten:
Deutsche Umlaute funktionieren nach 9 Jahren nun endlich auch in der Windows-Version!
Der Dank dafür geht an Maxim Dounin, der entsprechende Patches eingereicht hat.

Wer genug pingelig ist, damit seine Dateien mit der richtigen lokalen Uhrzeit dargestellt werden (und nicht in UTC), der kann folgende Konfigurations-Einstellung unmittelbar nach dem obigem charset UTF-8 in der nginx.conf hinzufügen:
autoindex_localtime on;

Nach einem nginx-Neustart wird meine Testdatei so dargestellt:

Rate this post

2 Gedanken zu „nginx als Windows-Version untauglich“

Schreibe einen Kommentar