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

我認為 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;
...

相關內容