NGINX Referer 모듈을 사용하여 핫링킹(Hotlinking) 방지
이번 포스트에서는 NGINX referer 모듈을 사용하여 핫링킹 을 방지하기 위한 구성 방법에 대해 설명합니다. 이 모듈을 통해 허용된 도메인만 콘텐츠에 접근할 수 있도록 설정함으로써, 불법적인 핫링킹을 차단하고 서버 자원을 보호할 수 있습니다.
웹에서 콘텐츠를 공유하는 것은 매우 일반적인 일입니다. 그러나 이 과정에서 발생할 수 있는 핫링킹(Hotlinking) 문제는 많은 웹사이트 운영자들에게 골칫거리가 됩니다.
핫링킹이란, 다른 웹사이트의 이미지나 미디어 파일을 자신의 웹페이지에 직접 링크하여, 해당 콘텐츠를 호스팅한 서버의 자원을 불법적으로 사용하는 행위를 말합니다.
목차
1. 핫링킹(Hotlinking) 이란?
2. ngx_http_referer_module 이란?
3. 핫링킹 방지를 위한 NGINX Referer 설정 방법
4. NGINX Referer 모듈을 통한 핫링킹 방지 테스트
5. 결론
1. 핫링킹(Hotlinking) 이란?
핫링킹이란 다른 호스팅된 서버에서 파일을 다운로드하지 않고 링크하는 행위입니다. 해당 파일을 핫링킹하여 사용자의 서버에 호스팅하면서 출처를 제공하지 않습니다. 대부분의 경우 핫링킹은 이미지를 위해 이루어지지만 다른 디지털 자산도 핫링킹될 수 있습니다.
핫링킹의 문제점:
- 서버 리소스 남용 – 핫링킹은 원래 리소스를 제공하는 서버의 대역폭과 리소스를 소비합니다. 서버가 자신의 리소스를 다른 웹사이트가 사용하게 되므로, 서버 부하가 커질 수 있습니다.
- 트래픽 증가 – 리소스를 제공하는 서버는 이미지 요청을 처리해야 하므로, 트래픽이 증가합니다. 이는 서버 비용이 높아질 수 있으며, 리소스를 낭비할 수 있습니다.
- 저작권 및 콘텐츠 보호 – 핫링킹은 원래 콘텐츠를 소유한 웹사이트의 저작권을 침해할 수 있습니다. 이미지를 허가 없이 다른 웹사이트에서 사용하면 저작권자가 해당 리소스를 보호하기 어렵습니다.
- 브랜딩 손상 – 웹사이트의 이미지를 다른 사이트에서 무단으로 사용할 경우, 해당 콘텐츠가 어떤 상황에서 어떻게 표시될 지 알 수 없기 때문에 브랜드 이미지가 손상될 수 있습니다.
2. ngx_http_referer_module 이란?
NGINX referer 모듈인 ngx_http_referer_module은 “Referer” 헤더 필드에서 잘못된 값을 가진 요청에 대해 사이트에 대한 액세스를 차단하는 데 사용됩니다.
적절한 “Referer” 필드 값을 가진 요청을 생성하기는 매우 쉽고 따라서 이 모듈의 의도된 목적은 그러한 요청을 철저하게 차단하는 것이 아니라 일반 브라우저가 전송한 요청의 대량 흐름을 차단하는 것이라는 점을 유념해야 합니다.
또한 일반 브라우저는 올바른 요청에 대해서도 “Referer”을 보낼 수 없음을 고려해야 합니다.
Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
포함된 $invalid_referer 값이 비어 있는 문자열로 설정되게 하는 “Referer” 요청 헤더 필드 값을 지정합니다. 그렇지 않으면 변수가 “1”로 설정됩니다.
매개변수는 다음과 같습니다:
- none – “Referer” 헤더가 없는 요청도 유효한 것으로 간주합니다.
- blocked – “Referer” 필드가 요청 헤더에 있지만 해당 값은 방화벽 또는 프록시 서버에 의해 삭제되었습니다. 그러한 값은 “http://” 또는 “https://”로 시작하지 않는 문자열입니다.
- server_names – “Referer” 요청 필드에는 서버 이름 중 하나가 포함됩니다.
- string – 서버 이름과 URI 접두사 옵션을 정의합니다. 서버 이름에는 시작 또는 끝에 “*”가 있을 수 있습니다.
3. 핫링킹 방지를 위한 NGINX Referer 설정 방법
NGINX Referer 모듈을 사용하여 핫링킹을 방지하는 방법은 위에서 설명한 valid_referers 지시문을 사용하여 방지할 수 있습니다.
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html;
}
location ~*\.(jpg|jpeg|png|gif|ico|css|js|mp4|webm|ogg|mp3|wav)$ {
valid_referers none example.com http://example.com;
if ($invalid_referer) {
return 403;
}
root /usr/share/nginx/static/files;
}
}
위와 같이 구성할 경우 Referer 필드에 example.com, http://example.com 이 포함된 요청에는 리소스를 허용하고 그 외에는 리소스에 대해 403 응답을 하게 됩니다.
4. NGINX Referer 모듈을 통한 핫링킹 방지 테스트
Referer 값을 확인하기 위해 아래와 같이 log_format과 access_log 지시문을 추가합니다.
log_format hotlink 'Referer: "$http_referer", Invaild Referer="$invalid_referer"';
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/hotlinkin.log hotlink;
location / {
root /usr/share/nginx/html;
index index.html;
}
location ~*\.(jpg|jpeg|png|gif|ico|css|js|mp4|webm|ogg|mp3|wav)$ {
valid_referers none example.com http://example.com;
if ($invalid_referer) {
return 403;
}
root /usr/share/nginx/static/files;
}
}
Referer 필드에 example.com 또는 http://example.com 이 포함된 요청을 보내면 정상적으로 이미지를 불러올 수 있습니다.

로그:

Referer 값에 http://example.com이 포함되어 있기 때문에 Invalid Referer 값은 없느 것을 확인할 수 있습니다.
핫링크 테스트를 위해 외부에서 접근할 HTML 을 작성합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hotlink Test</title>
</head>
<body>
<h1>Hotlink Test</h1>
<!-- NGINX 정적 리소스를 외부에서 요청 -->
<img src="http://example.com/nginxmascot.png" alt="Hotlinked Image">
</body>
</html>
NGINX Referer 모듈을 활성화하지 않았을 때, 외부에서 원본 리소스를 핫링킹하여 사용할 수 있습니다.

개발자 도구로 확인해보면 원본 서버에 .png 파일을 핫링킹하는 것을 확인할 수 있습니다.

NGINX Referer 모듈을 활성화하여 외부에서 요청하면 .png 파일을 불러오지 못하는 것을 확인할 수 있습니다.

개발자 도구로 확인해보면 원본 서버에 .png 파일을 핫링킹하는 것을 확인할 수 있습니다.

하지만 Network 탭을 확인해보면 핫링킹한 .png 파일이 NGINX 에서 구성한 403 에러를 반환하는 것을 확인할 수 있습니다.

로그를 확인해보면 요청 Referer 값이 example.com, http://example.com 에 포함되지 않기 때문에 Invalid Referer 값이 “1”로 설정된 것을 확인할 수 있습니다.

5. 결론
핫링킹은 웹사이트 운영자에게 심각한 문제를 일으킬 수 있는 사안이며, 이를 효과적으로 방지하는 것은 콘텐츠 보호와 서버 자원 관리를 위해 매우 중요합니다.
ngx_http_referer_module은 NGINX에서 핫링킹을 차단하는 데 유용한 도구로, 적절한 설정을 통해 허용된 도메인만 콘텐츠에 접근할 수 있도록 제어할 수 있습니다.
이번 포스트에서 살펴본 설정 방법을 통해, 웹사이트의 자원을 효율적으로 보호하고, 불법적인 콘텐츠 사용을 방지할 수 있습니다. 또한, 서버의 성능을 유지하고, 저작권을 존중하는 환경을 조성하는 데 기여할 수 있습니다.
NGINX Plus를 직접 사용하여 성능을 업그레이드 해보세요. NGINX Plus를 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 논의하십시오.
댓글을 달려면 로그인해야 합니다.