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]
내가 시도한 것
- 기존 솔루션을 검색했지만 작동하는 솔루션을 찾지 못했습니다.
- 변환기를 통해 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 ;
}
위의 코드는 테스트되지 않았습니다.