NGINX try_files em várias unidades no Windows

NGINX try_files em várias unidades no Windows

Estou migrando o nginx de uma VM Linux para o host Windows por motivos de desempenho e estou tendo problemas com esta parte.

No Linux a configuração é:

root /;

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

Onde /mnt/m, /mnt/d e /mnt/l são os pontos de montagem das unidades M:, D: e L: respectivamente.

No Windows eu tentei

root /;

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

mas gera esse erro

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

Parece que /é interpretado como a unidade C:, é a unidade a partir da qual o nginx é executado. Eu também tentei root ;deixar a diretiva root completamente de fora, mas nada funcionou.

Responder1

Consegui fazer isso aninhando (?) Locais nomeados. Porém, tenha cuidado, pois quaisquer cabeçalhos/opções definidos no bloco de localização principal não se aplicarão aos locais nomeados, pelo menos na minha experiência. A solução do @IvanShatsky com pontos de montagem NTFS parece ser muito melhor.

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

Responder2

Acho que o mklink no Windows pode ser uma solução.

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

Você pode vincular seu disco montado, por exemplo, C:\mnt\M, C:\mnt\D, C:\mnt\L com comandos como:

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

e depois em nginx.conf

...
root C:/mnt/;

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

informação relacionada