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?

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 namensWie 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:

ab version 1.23.4 funktioniert das.
Danke für den Hinweis!
Der Artikel wurde entsprechend angepasst und um die notwendigen Konfigurations-Einstellungen ergänzt.