NGINX try_files на нескольких дисках в Windows

NGINX try_files на нескольких дисках в Windows

Я переношу nginx с виртуальной машины Linux на хост Windows из соображений производительности, и у меня возникли проблемы с этой частью.

В Linux конфигурация следующая:

root /;

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

Где /mnt/m, /mnt/d и /mnt/l — точки монтирования дисков M:, D: и L: соответственно.

На Windows я пробовал

root /;

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

но выдает эту ошибку

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

Кажется, это /интерпретируется как диск C:, это диск, с которого запускается nginx. Я также пробовал root ;вообще убрать директиву root, но ничего не сработало.

решение1

Мне удалось сделать это, вложив(?) именованные расположения. Хотя будьте осторожны, так как любые заголовки/опции, которые вы устанавливаете в основном блоке расположения, не будут применяться в именованных расположениях, по крайней мере, по моему опыту. Решение @IvanShatsky с точками монтирования NTFS кажется намного лучше.

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

решение2

Я думаю, что mklink на Windows может стать решением.

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

Вы можете связать смонтированный диск, например, с C:\mnt\M, C:\mnt\D, C:\mnt\L с помощью команды типа:

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

а затем в nginx.conf

...
root C:/mnt/;

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

Связанный контент