성능상의 이유로 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
나는 이름이 지정된 위치를 중첩(?)하여 이를 수행했습니다. 적어도 내 경험상 기본 위치 블록에 설정한 헤더/옵션은 명명된 위치에 적용되지 않으므로 주의하세요. NTFS 마운트 지점을 사용하는 @IvanShatsky의 솔루션이 훨씬 더 나은 것 같습니다.
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;
...