パフォーマンス上の理由から、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 ;
ルート ディレクティブを完全に省略することも試しましたが、何も機能しませんでした。
答え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;
...