Nginx와의 핫 링크를 차단하는 방법

Nginx와의 핫 링크를 차단하는 방법

2022-06-03 last update

7 minutes reading Nginx
Nginx는 서버를 바쁘게 하지 않고 주어진 시간에 대량의 요청을 처리할 수 있는 경량급 웹 서버이다.비동기 처리, ipv6 지원, 캐시 로드 프로그램, http/2 지원, 블록 핫 링크, 스레드 탱크, SPDY와 SSL 등 복잡한 기능을 포함한다.그 중에서 어떤 사이트에 대해서도 가장 중요한 기능 중 하나는 핫링크를 막는 것이다.핫링크는 일반적으로 일부 소규모 사이트 관리자가 대역폭 비용을 부담할 수 없을 때 진행하여 최종적으로 다른 곳에서 얻는 악의적인 행위이다.이것은 합법적인 네트워크 관리자가 그들이 지불한 대역폭을 이용하는 것을 방해한다.가장 중요한 것은 원시 사이트 관리자에게 할당된 대역폭이 다 사용되고 사이트 소유자가 지나치게 소모된 대역폭을 지불하지 않을 때 링크 자원은 원시 사이트를 방문하는 사용자에게 사용할 수 없다는 것이다.한 마디로 하면 사이트의 완전성을 유지하기 위해 사이트 핫링크의 가용성을 멈춰야 한다. 본 안내서는 어떻게 쉽게 완성할 수 있는지 소개할 것이다.

준비


준비 단계에서는 뒤에 언급된 두 가지 방법에 대한 일반적인 설명을 기록한다.분명히 하나의 컨트롤러는 SSH를 통해 서버에 접근할 수 있고, 적당한 텍스트 편집기 (예를 들어 나노) 를 통해 Nginx 프로필을 열 수 있다는 점이 중요하다.둘 다 가져오면 다음 명령을 사용하여 변경 사항을 열고, 저장하고, 적용합니다.다음 단계에서는 사용자가 SSH를 통해 서버에 액세스했다고 가정합니다.
  • 다음 명령을 입력하여 Nginx의 기본 구성 파일을 엽니다.각 도메인에 별도의 구성 파일이 있는 경우 기본 이름 대신 이름을 사용합니다.
  • nano /etc/nginx/sites-available/default
  • 기본 또는 구성 파일에 다음 방법 중 하나에 설명된 코드를 입력합니다.그중 하나만 사용하도록 하세요.
  • 프로필을 실시간 모드로 전송하기 전에 다음 명령을 사용하여 프로필을 테스트합니다.
  • nginx -t
  • 모든 것이 정상적이라면 다음 명령을 계속 입력하여 변경 사항을 적용하여 적용합니다.
  • sudo systemctl restart nginx

    방법 1: 일반적인 방법


    일반적인 방법은 하나의 위치 블록만 포함하기 때문에 실현하고 이해하기 쉽다.또한 일부 파일 형식에 대한 요청만 막는 것이지 서버의 모든 요청을 잘못 인용하는 것을 막는 것이 아닙니다.
  • 다음 코드 세그먼트를 복사합니다.
  • nginx의 기본 파일을 엽니다. "준비"단계와 같습니다.
  • 복사된 코드 세그먼트를 기본 파일에서 찾은 첫 번째 위치 블록에 붙여넣습니다.nginx에서 대소문자를 구분하지 않는 정규 표현식 (~*) 은 항상 정사각형 (/) 보다 우선하므로 다음 코드 세그먼트는 정사각형 위치 블록 앞에서 실행됩니다.
  • 기본 파일을 저장하고 닫은 다음 준비 단계의 3, 4단계에 따라 변경합니다.
  • 다음 예시에서 css,gif,ico,jpeg,js,png,woff,woff2,ttf,ttc,otf,eot 파일에 대한 요청을 막습니다.위치 블록 아래에는 10개의 조건 문장이 있다.첫 번째 조건 문장은 웹 브라우저를 통해 자원을 직접 볼 수 있고, 두 번째와 세 번째 블록은 원시 사이트(나체 도메인과 www 하위 도메인)를 통해 자원을 볼 수 있으며, 나머지 블록(검색 제외)은?q와 마지막 블록은 검색엔진 파충류의 접근과 인덱스 자원을 허용하는데 이것은 인덱스 구글 이미지와bing 이미지의 이미지에 매우 중요하다.검색?q 구글 캐시 서비스에 접근할 수 있고 자원을 페이지와 함께 저장할 수 있기 때문에 사이트가 오프라인 상태일 때 구글 검색 결과를 통해 페이지에 직접 접근할 수 있습니다.
    location ~* \.(css|gif|ico|jpeg|jpg|js|png|woff|woff2|ttf|ttc|otf|eot)$ {
    if ($http_referer !~ "^$"){
    set $rule_0 1$rule_0;
    }
    if ($http_referer !~ "^http://nucuta.com/.*$"){
    set $rule_0 2$rule_0;
    }
    if ($http_referer !~ "^http://nucuta.com$"){
    set $rule_0 3$rule_0;
    }
    if ($http_referer !~* "google."){
    set $rule_0 4$rule_0;
    }
    if ($http_referer !~* "search?q=cache"){
    set $rule_0 5$rule_0;
    }
    if ($http_referer !~* "msn."){
    set $rule_0 6$rule_0;
    }
    if ($http_referer !~* "yahoo."){
    set $rule_0 7$rule_0;
    }
    if ($http_user_agent !~* "googlebot"){
    set $rule_0 8$rule_0;
    }
    if ($http_user_agent !~* "msnbot"){
    set $rule_0 9$rule_0;
    }
    if ($http_user_agent !~* "slurp"){
    set $rule_0 10$rule_0;
    }
    if ($rule_0 = "10987654321"){
    return 403;
    break;
    }
    }

    방법 2: Valid\u Referers 방법


    유효 인용이 가장 편리하고 널리 인정받는 무효 인용을 쉽게 막는 방법이다.앞의 방법에 비해 두 줄만 포함하고 매우 유연하다.그러나 정규 표현식과 무효 인용 요청을 막는 서로 다른 메커니즘이 관련되어 있기 때문에 이해하기 어렵다.
  • 다음 코드 세그먼트를 주 위치 블록의 중간과 맨 처음에 복사합니다.
  • Google, bing 또는 자신의 도메인 이름 등 허용된 도메인 이름으로 도메인 이름 목록을 바꿉니다.
  • 기본 파일을 저장하고 닫은 다음 준비 단계의 3, 4단계에 따라 변경합니다.
  • 유효한\u 참조 차단 없는 서버\u 이름
    *.linux.com linux.* www.linux.com/about/
    ~\.linux\.;
    
    if ($invalid_referer) {
    return 403;
    }
    이것은 주로valid\ureferer와invalid\ureferer 변수가 있는if 조건 표현식 두 개의 코드 블록이 있습니다.기본적으로 이 코드 블록은 다른 코드를 실행하기 전의 위치 블록 사이와 맨 처음에 사용되지만, 정규 표현식이 있는 위치 코드 블록 사이, 특정한 파일 형식을 검사하여 블록이 상기 문서 형식과 관련되도록 할 수도 있습니다. 방법 1 참조.앞에서 말한 바와 같이 이 방법은 두 개의 코드 블록만 포함하고 첫 번째 코드 블록은 3개의 키워드를 포함하며 HTTP 요청에referer 필드가 부족할 때 첫 번째는 "none", 어떤 중간자(예를 들어 프록시, 방화벽 등)가referer 필드를 삭제할 때 두 번째는 "blocked", 세 번째 키워드는 유효한 도메인 이름을 지정하는 데 사용된다.
    도메인 이름이 "~"기호로 시작하면 정규 표현식으로 간주되기 때문에 매우 복잡한 패턴을 사용할 수 있지만, 정규 표현식을 알 수 없으면 이해하기 어려울 수도 있습니다.만약valid\ureferers 문장에 조건이 충족되지 않으면invalid\ureferer 변수는 빈 문자열로 설정됩니다. 그렇지 않으면 1로 설정됩니다. 이것은 다가오는 요청에 referer 필드가 포함되지 않거나,nginx가 referer 필드가 방화벽이나 대리 삭제되었음을 확인하면,또는,referer 필드가 지정한 필드 (유효한 도메인 이름 목록) 로 설정되면,invalid referer 변수를 빈 문자열로 설정하여if 조건을 실행하지 않습니다.단, 요청이valid\ureferers 표현식에서 유효한 영역으로 지정되지 않은 영역에서 오면 이 요청을 막습니다.

     

    결론


    이 내용을 고려하고 Nginx 위탁 관리 사이트에서 핫 링크를 하는 것을 방지하십시오.