NGINX try_files en varias unidades en Windows

NGINX try_files en varias unidades en Windows

Estoy trasladando nginx de una máquina virtual Linux al host de Windows por motivos de rendimiento y tengo problemas con esta parte.

En Linux la configuración es:

root /;

try_files /mnt/m$uri /mnt/d$uri /mnt/l$uri =404;

Donde /mnt/m, /mnt/d y /mnt/l son los puntos de montaje de las unidades M:, D: y L: respectivamente.

En Windows lo intenté

root /;

try_files M:$uri D:$uri L:$uri =404;

pero arroja este error

*1 GetFileAttributesEx() "C:L:/[...]" failed (123: The filename, directory name, or volume label syntax is incorrect)

Parece /que se interpreta como la unidad C:, es la unidad desde la que se ejecuta nginx. También intenté root ;omitir la directiva raíz por completo, pero nada funcionó.

Respuesta1

Logré hacerlo anidando (?) ubicaciones con nombre. Aunque tenga cuidado, ya que los encabezados/opciones que establezca en el bloque de ubicación principal no se aplicarán en las ubicaciones nombradas, al menos en mi experiencia. La solución de @IvanShatsky con puntos de montaje NTFS parece ser mucho mejor.

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

Respuesta2

Creo que mklink en Windows puede ser una solución.

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/mklink

Puede vincular su disco montado, por ejemplo, C:\mnt\M, C:\mnt\D, C:\mnt\L con un comando como:

mklink /D C:\mnt\M M:
mklink /D C:\mnt\D D:
mklink /D C:\mnt\L L:

y luego en nginx.conf

...
root C:/mnt/;

try_files /M/$uri /D/$uri /L/$uri =404;
...

información relacionada