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