Ich verschiebe Nginx aus Leistungsgründen von einer Linux-VM auf den Windows-Host und habe mit diesem Teil Probleme.
Unter Linux lautet die Konfiguration:
root /;
try_files /mnt/m$uri /mnt/d$uri /mnt/l$uri =404;
Wobei /mnt/m, /mnt/d und /mnt/l die Einhängepunkte der Laufwerke M:, D: bzw. L: sind.
Unter Windows habe ich versucht
root /;
try_files M:$uri D:$uri L:$uri =404;
aber es wirft diesen Fehler
*1 GetFileAttributesEx() "C:L:/[...]" failed (123: The filename, directory name, or volume label syntax is incorrect)
Es scheint, /
dass es als Laufwerk C: interpretiert wird, das Laufwerk, von dem aus nginx ausgeführt wird. Ich habe auch versucht, root ;
die Root-Direktive ganz wegzulassen, aber nichts hat funktioniert.
Antwort1
Mir ist es gelungen, indem ich benannte Standorte verschachtelt(?) habe. Aber seien Sie vorsichtig, denn alle Header/Optionen, die Sie im Hauptstandortblock festlegen, gelten zumindest meiner Erfahrung nach nicht für die benannten Standorte. @IvanShatskys Lösung mit NTFS-Einhängepunkten scheint viel besser zu sein.
location / {
root "M:\\";
try_files $uri $uri/ @ddrive;
}
location @ddrive {
root "D:\\";
try_files $uri $uri/ @ldrive;
}
location @ldrive {
root "L:\\";
try_files $uri $uri/ =404;
}
Antwort2
Ich denke, mklink unter Windows könnte eine Lösung sein.
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/mklink
Sie können Ihre gemountete Festplatte beispielsweise mit C:\mnt\M, C:\mnt\D, C:\mnt\L verknüpfen, und zwar mit einem Befehl wie dem:
mklink /D C:\mnt\M M:
mklink /D C:\mnt\D D:
mklink /D C:\mnt\L L:
und dann in nginx.conf
...
root C:/mnt/;
try_files /M/$uri /D/$uri /L/$uri =404;
...