NGINX try_files über mehrere Laufwerke unter Windows

NGINX try_files über mehrere Laufwerke unter Windows

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;
...

verwandte Informationen