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 ;루트 지시문을 완전히 삭제하려고 시도했지만 아무것도 작동하지 않았습니다.

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

관련 정보