NGINX 이미지 외부 링크 막기 (Hotlinking)

서버 정비를 하다가 이전에 작성했던 이미지 외부에서 퍼가는거 막는 설정을 보면서 다시 재정리 하고 여기 정리 해둠

location ~* .(jpg|jpeg|png|gif|bmp|svg|swf|ico|zip|7z|ttf|woff|eot)$ {
    valid_referers none blocked server_names;
    if ($invalid_referer) {
        rewrite (.*)$ /exceptionFolder/Imagehotlinking.png redirect;
        access_log /var/logs/nginx-linsoo.pe.kr-hotlink.log;
    }
    log_not_found off; access_log off;
}

location ~* 부분은 대소문자를 가리지 않는 정규식 패턴에 맞는 주소가 들어올경우 이 구문에 적용되는것임.

.(jpg|jpeg|png|gif|bmp|svg|swf|ico|zip|7z|ttf|woff|eot)$

이 부분이 정규식 인데 그림으로 표현하면 아래와 같다.

접속 url 끝부분이 .jpg라던지 .bmp라던지 외부링크 막고 싶은 확장자로 적어주면 됨.

valid_referers none blocked server_names;

그 다음줄은 유효한 레퍼러를 지정하는것이다.
none :  리퀘스트 헤더에 레퍼러가 없는경우
blocked : 리퀘스트 헤더에 레퍼러 필드는 있으나 방화벽이나 프록시 서버에 의해 삭제된 경우
server_names : 레퍼러 필드에 서버이름이 포함된 경우

if ($invalid_referer) {
    rewrite (.*)$ /exceptionFolder/Imagehotlinking.png redirect;
    access_log /var/logs/nginx-linsoo.pe.kr-hotlink.log;
}

위에 해당하지 않는 상황일 경우 핫링크로 간주하고 처리를 하는건데 특정 이미지로 리다이렉트 돌려서 다른 이미지가 보여지도록 하는것임.

아 근데 여기서 한가지 문제가 생김. 핫링킹 이미지도 요청할때마다 저 항목에 걸려서 계속 리다이렉트가 되는 문제가 발생함.

location ~* ^((?!exceptionFolder).)*.(jpg|jpeg|png|gif|bmp|svg|swf|ico|zip|7z|ttf|woff|eot)$ {

맨 윗부분에 정규식을 이렇게 바꿔줘야 함.
(exceptionFolder 경로가 존재할경우 리다이렉트를 하지 않도록)

정규식을 이미지로 보면 위와 같음

테스트로는 야후 이미지 검색을 추천하는데 여기가 바로바로 확인이 됬었음.

 

위에 두번째 이미지 보드카를 선택했지만 보이는것은 라이언상무님이 나오게 됨.
그리고 이런 핫링킹 나올때 마다 로그파일 작성하도록 지정해줌.

 

전체설정

location ~* ^((?!exceptionFolder).)*.(jpg|jpeg|png|gif|bmp|svg|swf|ico|zip|7z|ttf|woff|eot)$ {
    valid_referers none blocked server_names;
    if ($invalid_referer) { 
        rewrite (.*)$ /exceptionFolder/Imagehotlinking.png redirect; 
        access_log /var/logs/nginx-linsoo.pe.kr-hotlink.log; 
    }
    log_not_found off; access_log off;
}

참고 : http://nginx.org/en/docs/http/ngx_http_referer_module.html


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다