파일을 찾을 수 없는 경우 다른 서버 및 도메인으로 리디렉션

파일을 찾을 수 없는 경우 다른 서버 및 도메인으로 리디렉션

Apache에서 Nginx로 마이그레이션했기 때문에 Nginx에서 모든 규칙을 설정하고 싶습니다.

목표:요청한 서버에서 해당 파일을 찾을 수 없는 경우 동일한 파일 이름을 가진 다른 도메인으로 URL을 리디렉션합니다.

사용자가 열면https://www.example.com/data/1.jpg그러면 내 서버는 "data" 디렉토리에서 "1.jpg"를 찾으려고 시도합니다. 해당 파일을 찾을 수 없으면 사용자를 다음과 같은 백업 서버 URL로 리디렉션하십시오.https://www.example2.com/backup/1.jpg

.htaccess의 예

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) - [L]
RewriteRule (.*) https://example2.com/backup/$1 [L]

내가 시도한 것

  1. 기존 솔루션을 검색했지만 작동하는 솔루션을 찾지 못했습니다.
  2. 변환기를 통해 Apache 구성을 Nginx 구성으로 변환하려고 시도했지만 작동하지 않습니다.

일부는 구성을 시도했지만 작동하지 않습니다.

    location ~ /data/.* {
        if (-e $request_filename){
            rewrite ^ https://www.example2.com/backup/$1 last;
        } 
    }


    location ~ /data/.* {
        if (-e $request_filename){
            rewrite ^ https://www.example2.com/backup/$1 permanent;
        } 
    }


    location ~ /data/.* {
        try_files $uri https://www.example2.com/backup/$uri;
    }

답변1

@Rob 답변을 수정한 후 해결책을 얻었습니다.

set $v_filename nf;

location ~ ^/data/(.*)$ {
    try_files  $uri  @externalbackup;
    set $v_filename $1;
}

location @externalbackup {
     return 301  https://www.example2.com/backup/$v_filename ;
}

답변2

nginx에서는try_files 하나 이상의 로컬 디렉터리에 있는 경우 로컬 파일의 콘텐츠를 제공하는 지시문입니다. 파일을 찾을 수 없으면 마지막 매개변수에 지정된 URI로 내부 리디렉션이 수행됩니다.

외부로 리디렉션할 수 없으므로 약간의 속임수와 2단계 접근 방식이 필요합니다. try_files 옵션에서는 해당 내부 리디렉션에 대해 명명된 위치를 사용하고 해당 명명된 위치에서 외부 리디렉션을 구성합니다.

location / {
    try_files  $uri  @externalbackup;
}

location @externalbackup {
     return 301  https://www.example2.com/backup$request_uri ;
}

위의 코드는 테스트되지 않았습니다.

관련 정보