스마트캐싱 서비스

2014.02.19 13:05

소울 조회 수:8152

1. 스마트캐싱란?

클라이언트로부터 요청받은 이미지를(하드디스크에서 읽어오게 됨) 메모리에 적재해뒀다가 같은 이미지를 요청받으면 하드디스크가 아닌

메모리에서 전송하여 웹페이지 로딩속도를 향상시키는 기술입니다.

만약, 설정해 놓은 캐시메모리 용량을 초과할 경우에는, 요청 횟수에 따라 중요도가 설정되어 있어 중요도가 낮은 파일부터 메모리에서 삭제

하는 원리입니다.

 

2. 스마트캐싱 구현 방법

스마트캐싱 서비스를 구현하는 데에 사용되는 프로그램은 squid라는 프로그램입니다.

설치도 무척 쉽고 간결하며 설정 후 서비스로 연결되면 강력한 성능을 발휘합니다.

공식사이트는 www.squid-cache.org 입니다.

 

3. 스마트캐싱 설치 및 설정

http://squid-cache.org 에서 최신버젼을 다운 받습니다.

현재 최신버젼은 2012년 2월 5일자로 다운 받습니다.

cd /usr/local/src

wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.19.tar.gz

tar xvzf squid-3.1.19.tar.gz

cd squid-3.1.19

./configure --prefix=/usr/local/squid

make

make install

 

사용자, 그룹 생성 및 소유자 변경

# groupadd -g 3128 squid
# adduser -u 3128 -g squid -d /usr/local/squid/var squid    // 홈디렉토리가 이미 있어서 파일을 복사하지 않는다고 나옵니다.

# passwd squid    // squid 계정의 패스워드를 입력합니다.

# chown squid.squid -R /usr/local/squid

 

squid 설정 파일을 아래 내용으로 대체하고 도메인 및 포트는 적절하게 수정합니다.

웹서버포트 8080, squid 포트 80을 기준으로 작성하였습니다.

vi /usr/local/squid/etc/squid.conf

 

hierarchy_stoplist cgi-bin ?
acl apache rep_header Server ^Apache
 

# 홈페이지 소스 (또는 특정 단어)는 캐시서버에 저장하지 않음

acl QUERY urlpath_regex cgi-bin \? php php3 htm html jsp js css asp aspx

cache deny QUERY    # (이부분 포함되는지 안되는지 확인 필요)

 

# 디스크에 저장할 객체를 대체하는 방식

cache_swap_low 90

cache_swap_high 95

 

memory_replacement_policy lru
emulate_httpd_log on
log_ip_on_direct on
log_mime_hdrs off
log_fqdn off
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95
negative_ttl 60 seconds
connect_timeout 60 seconds
read_timeout 1 minutes
request_timeout 1 minutes
client_lifetime 1 day
half_closed_clients off
pconn_timeout 60 seconds
shutdown_lifetime 60 seconds
acl BLOCK_URI urlpath_regex -i \.\.\/ \.\.\. \.\. \.ida \.IDA \.cnf \.dll passwd boot \.exe cmd  default\.ida XXXXXX \/bin\/sh  wget
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 8080    # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 1025-65535  # unregistered ports
acl CONNECT method CONNECT
http_access allow all
http_access allow manager localhost
http_access deny BLOCK_URI
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
 

# ★사용자 계정과 설정한 패스워드를 입력합니다.

cache_mgr squid
cachemgr_passwd smileserv1234  all    # 여기서 smileserv1234 가 패스워드입니다.
 

# squid 데몬을 실행할 사용자
cache_effective_user squid

cache_effective_group squid

 

# 사용할 도메인 등록

visible_hostname img.smileserv.com 

 

# 캐시에 저장될 파일 크기
maximum_object_size 15 MB

minimum_object_size 10 KB

캐싱될 개체의 크기를 정하는 부분인데 간혹 10kbyte 미만의 이미지가 있을 수도 있으니 작은 이미지들이 많다면

'0'으로 설정해줍니다.


cache_access_log /usr/local/squid/var/logs/access.log
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log /usr/local/squid/var/logs/store.log
pid_filename /var/run/squid.pid

 

# 캐시 메모리로 잡을 메인 메모리 (1GB 식으로 해도 됌)
cache_mem 2048 MB

 

logfile_rotate 1
memory_pools on
memory_pools_limit 0
client_db off
always_direct allow all
error_directory /usr/local/squid/share/errors/ko
uri_whitespace deny
high_response_time_warning 1500

 

# 서버IP 및 웹서버 포트(8080)

cache_peer 고객서버 ip parent 8080 0

 

# squid 가 사용할 포트(80) 및 웹서버 포트(8080)
http_port 80 accel defaultsite=img.smileserv.com:8080

 

스왑디렉토리를 초기화 합니다. (추후 초기화 할때는 squid 를 중지 후 초기화 하세요.)

/usr/local/squid/sbin/squid -z

squid 를 구동합니다.

/usr/local/squid/sbin/squid

[참고]

종료방법 : pkill -9 squid

 

※ 해당 포트번호(80) 를 iptables 에 등록하여 접근 허용하도록 합니다.

    웹서버도 허용이 되어있나 다시 확인합니다.

 

4. 스마트캐싱 확인

크롬이나 익스플로어 창에

예시 ) http://img.smileserv.com/images/test.jpg

이미지가 뜬것을 확인 후에 서버내 이미지파일을 삭제하고 위 url로 다시 접속해봅니다.

이미지가 뜨면 성공입니다.