Windows 上跨多个驱动器的 NGINX try_files

Windows 上跨多个驱动器的 NGINX try_files

出于性能原因,我正在将 nginx 从 Linux VM 移到 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

我认为 Windows 上的 mklink 可能是一个解决方案。

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

相关内容