
Nginx와의 핫 링크를 차단하는 방법
2022-06-03 last update
7 minutes reading NginxNginx는 서버를 바쁘게 하지 않고 주어진 시간에 대량의 요청을 처리할 수 있는 경량급 웹 서버이다.비동기 처리, ipv6 지원, 캐시 로드 프로그램, http/2 지원, 블록 핫 링크, 스레드 탱크, SPDY와 SSL 등 복잡한 기능을 포함한다.그 중에서 어떤 사이트에 대해서도 가장 중요한 기능 중 하나는 핫링크를 막는 것이다.핫링크는 일반적으로 일부 소규모 사이트 관리자가 대역폭 비용을 부담할 수 없을 때 진행하여 최종적으로 다른 곳에서 얻는 악의적인 행위이다.이것은 합법적인 네트워크 관리자가 그들이 지불한 대역폭을 이용하는 것을 방해한다.가장 중요한 것은 원시 사이트 관리자에게 할당된 대역폭이 다 사용되고 사이트 소유자가 지나치게 소모된 대역폭을 지불하지 않을 때 링크 자원은 원시 사이트를 방문하는 사용자에게 사용할 수 없다는 것이다.한 마디로 하면 사이트의 완전성을 유지하기 위해 사이트 핫링크의 가용성을 멈춰야 한다. 본 안내서는 어떻게 쉽게 완성할 수 있는지 소개할 것이다.
준비
다음 명령을 입력하여 Nginx의 기본 구성 파일을 엽니다.각 도메인에 별도의 구성 파일이 있는 경우 기본 이름 대신 이름을 사용합니다.
기본 또는 구성 파일에 다음 방법 중 하나에 설명된 코드를 입력합니다.그중 하나만 사용하도록 하세요.
프로필을 실시간 모드로 전송하기 전에 다음 명령을 사용하여 프로필을 테스트합니다. 모든 것이 정상적이라면 다음 명령을 계속 입력하여 변경 사항을 적용하여 적용합니다.
일반적인 방법은 하나의 위치 블록만 포함하기 때문에 실현하고 이해하기 쉽다.또한 일부 파일 형식에 대한 요청만 막는 것이지 서버의 모든 요청을 잘못 인용하는 것을 막는 것이 아닙니다. 다음 코드 세그먼트를 복사합니다. nginx의 기본 파일을 엽니다. "준비"단계와 같습니다. 복사된 코드 세그먼트를 기본 파일에서 찾은 첫 번째 위치 블록에 붙여넣습니다.nginx에서 대소문자를 구분하지 않는 정규 표현식 (~*) 은 항상 정사각형 (/) 보다 우선하므로 다음 코드 세그먼트는 정사각형 위치 블록 앞에서 실행됩니다. 기본 파일을 저장하고 닫은 다음 준비 단계의 3, 4단계에 따라 변경합니다. 다음 예시에서 css,gif,ico,jpeg,js,png,woff,woff2,ttf,ttc,otf,eot 파일에 대한 요청을 막습니다.위치 블록 아래에는 10개의 조건 문장이 있다.첫 번째 조건 문장은 웹 브라우저를 통해 자원을 직접 볼 수 있고, 두 번째와 세 번째 블록은 원시 사이트(나체 도메인과 www 하위 도메인)를 통해 자원을 볼 수 있으며, 나머지 블록(검색 제외)은?q와 마지막 블록은 검색엔진 파충류의 접근과 인덱스 자원을 허용하는데 이것은 인덱스 구글 이미지와bing 이미지의 이미지에 매우 중요하다.검색?q 구글 캐시 서비스에 접근할 수 있고 자원을 페이지와 함께 저장할 수 있기 때문에 사이트가 오프라인 상태일 때 구글 검색 결과를 통해 페이지에 직접 접근할 수 있습니다.
유효 인용이 가장 편리하고 널리 인정받는 무효 인용을 쉽게 막는 방법이다.앞의 방법에 비해 두 줄만 포함하고 매우 유연하다.그러나 정규 표현식과 무효 인용 요청을 막는 서로 다른 메커니즘이 관련되어 있기 때문에 이해하기 어렵다. 다음 코드 세그먼트를 주 위치 블록의 중간과 맨 처음에 복사합니다. Google, bing 또는 자신의 도메인 이름 등 허용된 도메인 이름으로 도메인 이름 목록을 바꿉니다. 기본 파일을 저장하고 닫은 다음 준비 단계의 3, 4단계에 따라 변경합니다. 유효한\u 참조 차단 없는 서버\u 이름
도메인 이름이 "~"기호로 시작하면 정규 표현식으로 간주되기 때문에 매우 복잡한 패턴을 사용할 수 있지만, 정규 표현식을 알 수 없으면 이해하기 어려울 수도 있습니다.만약valid\ureferers 문장에 조건이 충족되지 않으면invalid\ureferer 변수는 빈 문자열로 설정됩니다. 그렇지 않으면 1로 설정됩니다. 이것은 다가오는 요청에 referer 필드가 포함되지 않거나,nginx가 referer 필드가 방화벽이나 대리 삭제되었음을 확인하면,또는,referer 필드가 지정한 필드 (유효한 도메인 이름 목록) 로 설정되면,invalid referer 변수를 빈 문자열로 설정하여if 조건을 실행하지 않습니다.단, 요청이valid\ureferers 표현식에서 유효한 영역으로 지정되지 않은 영역에서 오면 이 요청을 막습니다.
이 내용을 고려하고 Nginx 위탁 관리 사이트에서 핫 링크를 하는 것을 방지하십시오.
준비
준비 단계에서는 뒤에 언급된 두 가지 방법에 대한 일반적인 설명을 기록한다.분명히 하나의 컨트롤러는 SSH를 통해 서버에 접근할 수 있고, 적당한 텍스트 편집기 (예를 들어 나노) 를 통해 Nginx 프로필을 열 수 있다는 점이 중요하다.둘 다 가져오면 다음 명령을 사용하여 변경 사항을 열고, 저장하고, 적용합니다.다음 단계에서는 사용자가 SSH를 통해 서버에 액세스했다고 가정합니다.
nano /etc/nginx/sites-available/default


nginx -t
sudo systemctl restart nginx

방법 1: 일반적인 방법
일반적인 방법은 하나의 위치 블록만 포함하기 때문에 실현하고 이해하기 쉽다.또한 일부 파일 형식에 대한 요청만 막는 것이지 서버의 모든 요청을 잘못 인용하는 것을 막는 것이 아닙니다.
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 방법
유효 인용이 가장 편리하고 널리 인정받는 무효 인용을 쉽게 막는 방법이다.앞의 방법에 비해 두 줄만 포함하고 매우 유연하다.그러나 정규 표현식과 무효 인용 요청을 막는 서로 다른 메커니즘이 관련되어 있기 때문에 이해하기 어렵다.
*.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 위탁 관리 사이트에서 핫 링크를 하는 것을 방지하십시오.