트래픽 도둑?

설치형 블로그의 잇점은 상당히 많다. 가장 큰 장점은 역시 입맛대로 바꿀 수 있다는 점. 그러나 단점도 만만치 않다. 이런 단점 중 하나는 바로 일일 전송량이다. 하루에 전송할 수 있는 전송량이 제한되다 보니 상당히 많은 문제가 발생한다. 특히 블로그에 올린 그림을 포털에서 가져갈 경우 거의 치명적이다. 이 글에서는 이처럼 블로그에 올린 그림을 다른 곳에서 가져갈 수 없도록 막는 방법을 알아 본다.

설치형 블로그의 고민

티스토리다음 블로그와 같은 가입형 블로그의 최대 장점 중 하나는 무제한으로 제공되는 전송량이다. 따라서 이런 서비스형 블로그를 운영하는 사람은 전송량 고민은 하지 않아도 된다. 반면에 이 블로그처럼 설치형 블로그(텍스트큐브)를 운영하는 사람의 고민 중 하나는 일일 전송량이다. 설치형 블로그는 대부분 웹 호스팅을 사용하며, 웹 호스팅은 하루 사용할 수 있는 전송량이 제한되어 있기 때문이다. 따라서 포털에서 던져주는 트래픽은 꼭 반가운 것도 아니다. 오히려 서버 다운등의 문제가 발생하기 때문에 오히려 불편하기도 하다.

이런 문제 때문에 트래픽을 줄이는 방법을 상당히 여러 번 올렸다. 압축 플러그인처럼 컨텐츠를 압축하는 플러그인도 올렸고 이미지를 다시 압축해서 전송하는 플러그인도 올렸다. 여기에 블로그에서 사용하는 자원을 다른 곳으로 돌리는 방법도 올렸다. 이렇게 전송량을 줄이기 위해 갖은 방법을 다 사용해도 부족한 것이 전송량이다. 따라서 최근에는 별도의 비용을 지불하고 지불하고 이미지 서버로 를 사용하고 있다. 그런데 며칠 전 트윗터로 블로그 전송량 초과로 접속할 수 없다는 연락을 받았다.

확인해 보니 정말 전송량 초과로 블로그에 접속할 수 없었다. 한때 하루 방문자수 '3만명'까지 증가했지만 최근에는 글을 거의 올리지 못하고 있는 덕에 하루 만명선으로 줄어든 상태인데 의외였다. 일단 블로그 트래픽을 초기화하고 웹 호스팅 업체에 연락해서 웹 로그 파일을 백업해 줄것을 요청했다. 현재 블로그의 하루 전송량은 '20G'이다. 이 트래픽으로 하루 방문자수 3만명 정도였을 때 전체 전송량의 7~80% 정도를 사용했다. 따라서 누군가 블로그 컨텐츠를 펌질해서 대형 포털에 노출하지 않았다면 도저히 발생할 수 없는 일이었다.

다음 날 사무실에서 웹 로그 파일을 확인해 봤다. 블로그에는 상당히 다양한 컨텐츠가 있다. 이중 에 관련된 글도 많다. 2008년 아이들과 주말 여행을 하며 올린 주말 여행 - 사천진리, 삼척 해수욕장라는 글이 있다. 이 글에는 강원도 초당순두부에 대한 내용이 나온다. 물론 맛있다고 올린 것은 아니고 맛이 없어서 올린 내용이다. 그런데 베스티즈라는 사이트에서 강원도 음식에 대한 글을 올리면서 블로그에 올린 초당 순두부의 이미지를 퍼갔다. 다운받은 뒤 올렸다면 퍼간 것 자체를 몰랐겠지만 블로그의 링크를 그대로 사용했다.

블로그에 올린 사진이다. 맛이 없어서 올렸는데 사진이 마음에 들었는지 사진만 퍼갔다. 이 덕에 한 6시간 정도 블로그에 전송량 초과가 발생했다.

그리고 베스티즈나는 강원도 음식이다.jpg라는 글을 다음 카페 중 규모가 상당히 큰 소울드레서에서 퍼갔다. 카페의 규모가 크다 보니 방문자 수도 많다. 이렇다 보니 나는 강원도 음식이다.jpg라는 글은 소울드레서 외에 다음 내 여러 카페로 퍼졌다. 블로그의 이미지를 직접 링크한 글이 포털의 카페에서 돌다 보니 평상시와는 달리 오후에 하루 전송량을 모두 소비하고 전송량 초과 메시자가 뜬 것이었다. 사실 이런 일은 이번이 처음은 아니다.

네이버 펌로거들아 제발 그만좀 해라라는 글에서 한번 설명했지만 네이버의 한 펌로거가 추억의 게임 8. 오락실 게임 1라는 글을 퍼갔다. 그리고 네이버 답게 퍼간 글을 메인에 올렸다. 결국 한시간에 하루 전송량의 10%씩 주는 것을 경험해야 했다. 퍼간 펌로거는 아무 생각없이 퍼간 것이겠지만 설치형 블로그를 운영하는 사람들에게는 아주 치명적이다.

외부의 이미지 직접 링크 막기

따라서 오늘은 엉뚱한 곳에서 이미지 링크를 퍼가 전송량 초과가 뜨지 않도록 특정 디렉토리를 지정한 참조 URL에서만 접근할 수 있도록 설정하는 방법을 설명하겠다. 보통 웹 서버로 아파치를 많이 사용한다. 따라서 설명 역시 아파치 웹 서버.htaccess를 이용해서 디렉토리에 따라 접근 권한을 설정할 수 있는 서버로 국한하겠다. 텍스트큐브는 이미지를 비롯한 첨부 파일을 `/attach``라는 폴더에 저장한다. 따라서 참조 URL이 원하는 URL일 때만 접근하도록 설정하면 외부 링크를 모두 막을 수 있다.

  1. 좋아하는 편집기를 열고 다음 내용을 붙여 넣는다.

    SetEnvIfNoCase Referer "offree.net" myhome
    SetEnvIfNoCase Referer "qaos.com" myhome
    SetEnvIfNoCase Referer ^$ myhome
    Order Allow,Deny
    Allow from env=myhome
    

    SetEnvIfNoCase Referer "offree.net" myhome 에서 offree.net는 자신의 블로그 주소로 바꾼다. 접근해도 되는 도메인이 더 있다면 SetEnvIfNoCase Referer "qaos.com" myhome처럼 다음 행에 이런 도메인을 추가하면 된다. 마지막으로 SetEnvIfNoCase Referer ^$ myhome는 참조 URL이 없을 때는 그림을 출력할 수 있도록 추가한 것이다[1].

  2. 파일을 .htaccess로 저장하고 접근을 막을 폴더(예: 라면 /attach)에 올린다.

이렇게 하면 다음 그림처럼 참조 URL이 https://offree.net 으로 시작하지 않으면 이 폴더를 접근할 수 없기 때문에 다음 그림처럼 외부에서 링크하면 그림 대신 X 상자나 깨진 그림 아이콘으로 표시된다.

관련 글타래


  1. 파일의 유형에 따라 막는 방법도 있지만 생략하겠다.