스마트캐싱 (squid 2.6) 설정 - 80포트 멀티도메인

리눅스/APACHE|2015. 1. 16. 16:49
반응형

아래 squid.conf 는 squid 2.6 버전에서 사용하던 파일 내용입니다.

 

하나의 IP에 여러 도메인을 사용할 경우

이 모든 도메인이 squid 적용을 받게 하려면 아래 룰을 참고하시기 바랍니다.

 

목적은 'squid를 80포트로 사용하기' 입니다.

 

단순히 squid 설정으로만 되지않아 iptables 와 같이 사용하였습니다.

 

(멀티도메인 사용을 하려는데 squid 8080포트는 되지만 squid 80포트로는 멀티도메인 사용이 잘 되지 않아 몇 일 고생했습니다.

혹시 squid 설정만으로 80포트 사용할 수 있으신분은 알려주시면 감사하겠습니다. ^^)

 

squid.conf 내용

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ? php php3 htm html jsp js css asp aspx
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

cache_swap_low 90
cache_swap_high 95

cache_replacement_policy lru

memory_replacement_policy lru
cache_dir null /tmp

emulate_httpd_log on
log_ip_on_direct on
mime_table /etc/squid/mime.conf
log_mime_hdrs off
log_fqdn off
check_hostnames off
allow_underscore off
hosts_file /etc/hosts
request_header_max_size 6 KB
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95

negative_ttl 60 seconds
collapsed_forwarding on
forward_timeout 2 minutes
connect_timeout 60 seconds
read_timeout 1 minutes
request_timeout 1 minutes
persistent_request_timeout 1 minute
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 all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80      # http
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
acl_uses_indirect_client on

log_uses_indirect_client off
http_access allow all
http_access allow manager localhost
http_access deny BLOCK_URI
http_access deny !Safe_ports
http_access deny CONNECT !SSL_portsf

reply_header_max_size 20 KB
cache_mgr squid
cachemgr_passwd sysdocu@ all        // squid 계정 패스워드 입력
mail_from squid@sysdocu.com

httpd_suppress_version_string on

 

# ---------  Important -------------- #
cache_effective_user squid
cache_effective_group squid

visible_hostname sysdocu.com        // squid 적용할 도메인을 입력해줍니다. 추가 가능
visible_hostname www.sysdocu.com

visible_hostname img.sysdocu.com

maximum_object_size 15 MB
minimum_object_size 10 KB
maximum_object_size_in_memory 1024 KB

access_log /home/squid/logs/access.log squid
cache_log /home/squid/logs/cache.log
cache_store_log /home/squid/logs/store.log

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh

pid_filename /var/run/squid.pid

cache_mem 2 GB
cache_peer 192.168.10.2 parent 80 0        // 서버 IP와 웹서버 포트를 입력해줍니다.

http_port 8080 accel defaultsite=sysdocu.com:80 vhost        // squid 적용할 도메인을 입력해줍니다. 추가가능
http_port 8080 accel defaultsite=www.sysdocu.com:80 vhost
http_port 8080 accel defaultsite=img.sysdocu.com:80 vhost

refresh_pattern -i .jpg$ 0 100% 86400 reload-into-ims
refresh_pattern -i .gif$ 0 70% 86400 reload-into-ims
refresh_pattern -i .png$ 0 70% 86400 reload-into-ims
refresh_pattern -i .swf$ 0 70% 86400 reload-into-ims
# ---------  Important -------------- #

 

logfile_rotate 1
memory_pools on
memory_pools_limit 0
client_db off
always_direct allow all
error_directory /usr/local/squid/share/errors/Korean
uri_whitespace deny
coredump_dir /home/squid/cache
high_response_time_warning 1500
store_dir_select_algorithm least-load

 

현재 squid.conf 로는 웹포트 80, squid 포트 8080으로 설정하였습니다.

하지만 소스에서 이미지 경로를 sysdocu.com:8080/rabbit.jpg 등으로 수정하여 사용하지 않으려면

아래와 같이 iptables 로 룰을 추가해 주도록합니다.

 

iptables 룰 추가

iptables -t nat -A PREROUTING -p tcp -s 0.0.0.0/0 -d 192.168.10.2 --dport 80 -j DNAT --to 192.168.10.2:8080

 

80포트로 접속시 squid 포트인 8080 으로 연결시키라는 뜻입니다.

 

부팅할때 자동으로 iptables 룰이 올라오도록 /etc/rc.d/rc.local 에 추가를 해줍니다.

 

[참고]

80 포트 접속 > 8080 포워딩 > 80 이미지 로딩 시도 > 8080 접속시도 > .... 와 같이 loop 되지 않나.. 하는 걱정은 안하셔도 됩니다.

  

웹브라우져를 통해 처음 서버의 iptables에 접근하면

iptables 가 80포트로 접속한 요청은 8080으로 포워딩 시켜주며 역할을 다하게 됩니다.

squid 8080 포트에서는 로컬 서버의 80포트(이때는 iptables 를 거치지 않습니다.)의 이미지를 가져오게 됩니다.

반응형

댓글()