993
中電雲集
圖片型squid的配置
?用Squid搭建Cache服務器 - [技術筆記]
2009-03-30 | Tag:squid 反向代理 cache 配置
版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
https://iyubo.blogbus.com/logs/37254471.html
其實本人實在是更喜歡Varnish一些,而線上用來跑css/js等靜態文件cache的Varnish也確實運行的非常好,緩存的命中率也很高,性能也很好。但是因為是內存式的Cache,Varnish在緩存圖片時當達到一定量的時候會出現無法分配內存導致重啟子進程緩存丟失的情況。所以當圖片數量級較大且訪問量較大時,還是老老實實用Squid吧。
安裝環境
操作係統: CentOS release 5.2 (Final)
Kernel: 2.6.18-92.el5PAE
軟件列表
squid-2.6.STABLE22.tar.gz
軟件存放位置
/data/software
安裝過程
#/usr/sbin/groupadd squid -g 610
#/usr/sbin/useradd -u 610 -g squid squid
#mkdir /srv/scache
#chmod +w /var/vcache
#chown -R squid.squid /srv/scache
#mkdir /var/log/squid
#chmod +w /var/log/squid
#chown -R squid.squid /var/log/squid
#cd /data/software/pkg
#tar zxvf ../squid-2.6.STABLE22.tar.gz
#cd squid-2.6.STABLE22
#./configure –prefix=/usr/local/squid
#make && make install
編輯Squid配置文件
#vi /usr/local/squid/etc/squid.conf
————————-華麗的分割線,以下都是配置文件內容—————————-
#定義acl項名稱
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
acl safeprotocol protocol HTTP
acl test dstdomain .test.com
acl CONNECT method CONNECT
#定義acl規則
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access allow safeprotocol Safe_ports test
http_access deny all
icp_access allow all
#squid監聽端口
http_port 80 accel defaultsite=59.151.32.58 vhost
always_direct allow all
#後端服務器
cache_peer 10.10.10.8 parent 80 0 no-query originserver
hierarchy_stoplist cgi-bin ?
#內存cache大小
cache_mem 2048 MB
#內存cache中最大的object大小(超過這個值則不進入內存cache)
maximum_object_size_in_memory 8 KB
#內存cache的替換規則
memory_replacement_policy lru
#硬盤cache的替換規則
cache_replacement_policy lru
#磁盤cache目錄(文件類型 cache目錄路徑 cache目錄大小 二級目錄個數 每個二級目錄下的三級目錄個數)
cache_dir ufs /srv/scache 40000 16 256
#磁盤cache中最小的object的大小(低於這個值則不緩存)
minimum_object_size 0 KB
#磁盤cache中最大的object的大小(超過這個值則不緩存)
maximum_object_size 2048 KB
cache_swap_low 90
cache_swap_high 95
#定義日誌格式
logformat combined %>a %ui %un [%tl] “%rm %ru HTTP/%rv” %Hs %<st “%{Referer}>h” “%{User-Agent}>h” %Ss:%Sh
#記錄相關日誌
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#日誌rotate(24則後綴從.0到.23)
logfile_rotate 24
emulate_httpd_log on
#如果你的URL裏麵帶有?,這兩行一定要注銷掉
#acl QUERY urlpath_regex cgi-bin \?
#cache deny QUERY
#配置自動更新(關於後麵的三個值請參考Squid配置手冊)
refresh_pattern -i \.jpg$ 60 80% 1440
refresh_pattern -i \.png$ 60 80% 1440
refresh_pattern -i \.gif$ 60 80% 1440
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95
request_header_max_size 10 KB
reply_header_max_size 10 KB
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
#相關timeout設置
forward_timeout 4 minutes
connect_timeout 3 minutes
peer_connect_timeout 30 seconds
read_timeout 15 minutes
request_timeout 1 minute
persistent_request_timeout 3 minutes
half_closed_clients off
pconn_timeout 1 minute
#cache管理員郵箱
cache_mgr webmaster@test.com
cache_effective_user squid
cache_effective_group squid
#squid服務器的visible_hostname,此處指定的值顯示在Squid響應的Header裏麵的X-Cache項中
visible_hostname squidserver
coredump_dir /var/log/squid/cache
————————華麗的分割線,以上都是配置文件內容—————————–
初始化squid緩存目錄
#/usr/local/squid/sbin/squid -z
啟動squid
#/usr/local/squid/sbin/squid -sD
配置完成以後,最重要最重要的一點,修改Squid服務器的hosts文件,將需要Cache的域名指向到後端的服務器IP上
相關命令
停止squid
/usr/local/squid/sbin/squid -k shutdown
啟用新配置
/usr/local/squid/sbin/squid -k reconfig
通過crontab每小時截斷/輪循日誌
59 * * * * /usr/local/squid/sbin/squid -k rotate
查看squid運行狀況
/usr/local/squid/bin/squidclient -p 80 mgr:info
/usr/local/squid/bin/squidclient -p 80 mgr:5min
查看squid內存使用情況
/usr/local/squid/bin/squidclient -p 80 mgr:mem
查看squid磁盤使用情況
/usr/local/squid/bin/squidclient -p 80 mgr:diskd
查看squid已緩存列表(小心使用,可能會導致crash)
/usr/local/squid/bin/squidclient -p 80 mgrbjects
強製更新某個url
/usr/local/squid/bin/squidclient -p 80 -m PURGE https://img.test.com/h/a.jpg
查看squid緩存到內存cache中並返回給訪問用戶的項
#cat /var/log/squid/access.log | grep TCP_MEM_HIT
查看squid緩存到磁盤cache中並返回給訪問用戶的項
#cat /usr/local/squid/var/logs/access.log | grep TCP_HIT
查看沒被squid緩存住,直接從原始服務器獲取並返回給訪問用戶的項
#cat /usr/local/squid/var/logs/access.log | grep TCP_MISS
關於 TCP_XXXX 等參數及代表的信息,請參考《squid中文權威指南》13.2.1 章節。
更多參數
/usr/local/squid/bin/squidclient -h
/usr/local/squid/bin/squidclient -p 80 mgr:menu
最後更新:2017-01-04 22:34:32