出於效能原因,我將 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;
...