squid代理與快取實踐(一)
第1章 Squid介紹
1.1 快取伺服器介紹
- 快取伺服器(英文意思cache server),即用來儲存(介質為記憶體及硬碟)使用者訪問的網頁,圖片,檔案等等資訊的專用伺服器。這種伺服器不僅可以使使用者可以最快的得到他們想要的資訊,而且可以大大減少服務端網路傳輸的資料量。快取伺服器往往也是代理伺服器。對於網站的使用者來說,快取伺服器和代理是不可見的,即在使用者看來所有的網站資訊都來自其正在訪問的網站,而實際上可能是快取伺服器在提供訪問資料。
- 目前國內網際網路公司常用的快取伺服器有:squid,varnish(幾乎絕跡),nginx,ats。
- squid作為快取和代理伺服器的歷史十分的悠久,本章我們主要講述squid服務,儘管不少人談及其他軟體的快取機制比squid如何優異,但我們還是要首先掌握這個老牌的開源cache軟體,因為它經歷的歷程實在是太悠久了,等大家掌握了squid服務後,其他的軟體就不在話下了。如果再有時間,可以測試下varnish,nginx,squid三者之間的效能對比,而不是輕易的聽信於他人的說法,別人說好,只能代表他個人的觀點,我們自己用事實證明,才是學習和工作的真諦。
- 國內基本上90%以上的商業CDN公司,象國內的CDN基本都在用squid,象藍汛,網宿,帝聯,sina在用ats。
Squid官方:http://www.squid-cache.org/
1.2 Web快取相關概念
1.2.1 cache命中
cache命中是在cache server 每次從它的快取裡滿足客戶端HTTP請求時發生。cache命中率,是所有客戶端HTTP請求中命中的比例。Web快取典型的cache命中率在30%到60%之間。另一個相似的度量單位叫做位元組命中率,描繪了cache提供服務的資料容量(位元組數),如何提升cache命中率?
1)apache nginx 可以expries,cache-control快取頭
2)動靜分離,靜態化,對靜態走CDN
3)mysql cache讓快取靠前
4)4XX,5XX之類錯誤頁面,死鏈不快取。
1.2.2 cache丟失
cache丟失在cache server不能從它的快取裡滿足客戶端HTTP請求時發生。cache丟失的原因有很多種。
1)當cache server第一次接收到對第一個新資源的請求時,就會產生一個cache丟失。如何解決第一次命中?
預熱或者預取。
a,內部先請求訪問。可以通過指令碼實現(這是個思路但不靠譜)。
b,後端生成資料之後,統一推到前端cache server。即預取,預熱。
2)儲存空間滿或者物件自身過期,cache server會清除這些快取物件以釋放空間給新物件。
a,加大記憶體或者磁碟。
b,過期時間設定的長一些。
c,引數設定,快取的引數設定大一些。最大快取物件2M(熱點快取)。
d,分資源快取,1M,10M,100M(分拆伺服器,acl 正則匹配拋給不同的pools)
3)還有可能是客戶訪問的資源不可到達。原始伺服器會指示cache server 怎樣處理使用者響應。例如,它會提示資料不能被快取,或在有限的時間內才被重複使用等等
1.2.3 cache確認
- 對於快取來講,資料的一致性是一個特別頭疼的問題,特別是memcached。
- cache確認保證cache server不對訪問的使用者返回過期的資料。在重複使用快取物件時,cache server需要經常從原始伺服器確認它。假如伺服器指示squid的拷貝仍然有效,資料就傳送出去。否則,squid更新它的快取拷貝,並且轉發給客戶。
- 當用戶更新了資料到資料庫或者儲存伺服器的時候,可以從業務角度主動呼叫介面清除該物件快取的指令。CDN 5-15分鐘。
- 圖片放到CDN了需要更新嗎?不需要更新。圖片修改算更新,這樣的業務就要推送。
- 網站改版:再CDN上推送JS,css(改名)
from:http://home.arcor.de/mailerstar/jeff/squid/chap01.html#al
1.3 squid服務介紹
- Squid是一個高效能的代理快取伺服器,Squid支援FTP,gopher和HTTP協議。和一般的代理快取軟體不同,Squid用一個單獨的,非模組化的,I/O驅動的程序來處理所有的客戶端請求。
- Squid將資料元快取在記憶體和硬碟中,同時也快取DNS查詢的結果。Squid支援SSL,支援訪問控制。由於使用了ICP(輕量Internet快取協議),Squid能夠實現層疊的代理陣列,從而最大限度的節約頻寬。
- Squid Cache(簡稱Squid)是一個流行的代理服務武器和Web快取伺服器軟體。Squid服務有相當多的用途:
- 用於放置在Web伺服器的前面,快取網站Web伺服器的相關資料,這樣使用者請求快取伺服器就可以直接返回資料給使用者了,從而提升了使用者的訪問網站體驗,從另一方面也減輕了Web伺服器,資料庫伺服器,圖片檔案儲存伺服器等業務伺服器的壓力。這種應用被稱之為反向代理服務。
- 用於放置在企業內部關鍵出網位置或者某些共享網路的前端,快取內部上網使用者的資料,域名系統和其他網路搜尋資料等,這樣使用者上網請求的資料,就可以由快取伺服器返回給內部使用者,而不需要上網了,從而使得內部使用者上網更快,更安全,也會大大節約公司的頻寬。這種應用被稱之為正向代理服務(普通代理或者透明代理)。
- 通過放在網路的關鍵位置過濾網路流量和訪問資料,提升整個網路安全。例如:可以監控及限制內部企業員工的上網行為,可以和iptables配合作為辦公網的閘道器。
- 用作區域網通過代理上網,只要是一臺可以上網的機器就可以,位置隨便,讓所有的使用者的瀏覽器設定這個伺服器代理上網即可。
Squid代理伺服器主要用於類Unix系統中執行,其發展歷史相當悠久,功能也相當完善。除了對HTTP支援的很好外,對於FTP與HTTPS的支援也相當好,在3.0測試版中也支援了IPv6,Squid的主頁在http://www.squid-cache.org。目前業界主流CDN都是基於Squid進行二次開發作為cache快取伺服器的。
1.3.1 傳統代理服務原理
傳統的代理伺服器就是前面我們所說的通過瀏覽器設定代理的方法:
windows如何設定代理?
1.3.2 透明代理服務原理
- 所謂透明代理,是相對於代理伺服器而言,客戶端不需要做任何和代理伺服器相關的設定和操作,對使用者而言,感覺不到代理伺服器的存在,所以稱之為透明代理。即把代理伺服器部署在核心的上網出口,當用戶上網瀏覽頁面時,會交給代理伺服器向外請求,如果結合iptables可以實現代理+閘道器+內容過濾+流量安全控制等完整的上網解決方案。
透明代理流程說明:
使用者A傳送一個訪問請求到防火牆,由防火牆將該使用者的訪問請求轉發到SQUID,SQUID在先檢查自身快取中有無該使用者請求的訪問內容,如果沒有,則請求遠端目的伺服器,獲取該使用者的訪問內容,在返回給使用者的同時,在自身快取保留一份記錄以備下次呼叫;當用戶B傳送一個和使用者A相同的訪問請求時,由防火牆將轉發該使用者請求到SQUID,SQUID檢查自身快取發現有同樣內容後,直接將該內容返回給使用者。
1.3.3 反向代理服務原理
- 普通代理方式是代理內部網路使用者訪問internet上伺服器的連線請求,客戶端必須指定代理伺服器,並將本來要直接傳送到internet上伺服器的連線請求傳送給代理伺服器處理。反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從內部伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。
反向代理流程說明:
- SQUID作為反向代理伺服器,通常工作在一個伺服器叢集的前端,在使用者端看來,SQUID伺服器就是他說要訪問的伺服器,而實際意義上SQUID只是接受使用者的請求,同時將用過戶請求轉發給內網真正的WEB伺服器,如果SQUID本身有使用者要訪問的內容,則SQUID直接將資料返回給使用者,起到了快取資料的作用,減少了後端服務的壓力。
1.3.4 三種代理伺服器對比
問:網站什麼時候就需要用squid(CDN)了?
靜態抗不住了,想節省頻寬,節省成本,想提高訪問速度
a,節省頻寬及伺服器成本。
b,提升使用者體驗。
c,源站抗不住了。
1.3.5 淘寶最新CDN架構圖
淘寶:
1.3.6 如何選擇squid服務的版本
- 目前主流使用的Squid快取服務,大公司,2.7是最多的,基本上90%以上的商業CDN公司,例如國內的CDN,藍汛,網宿,帝聯都在用squid2.7,squid3.0使用C++重寫後,效能上和Squid 2.6和2.7還是有些距離的。使用的人並不是很多,效能穩定性等還有必要在等等看。
第2章 安裝squid硬體和系統要求
2.1 作業系統環境
Squid可以執行在幾乎所有的常見Unix及Linux系統上,也可以在Microsoft Windows上執行。儘管squid的Windows支援在不斷改進,但在Unix及Linux系統上執行Squid依然是更簡單,安全,更有效率,本章我們就使用Centos6.4 x86_64來執行Squid。
2.2 伺服器硬體環境
1)第一重要資源:記憶體
squid對硬體的要求最主要的是記憶體資源。記憶體短缺會嚴重影響效能。因為所有的物件都會盡可能的被快取到記憶體中,這樣才能更快的提升使用者的響應及返回資料。
2)第二重要資源:磁碟
磁碟空間也是另一個squid能夠高效執行的重要因素。更多的磁碟空間意味著更多的快取目標和更高的命中率。快速的磁碟介質也是必要的。例如:用ssd,sas替代sata磁碟,除了使用過raid外,可以指定多個磁碟路徑快取。
3)其他:磁碟與記憶體的關聯
因為squid對每個快取響應使用少數記憶體,因此在磁碟空間和記憶體要求之間有一定聯絡。基本規則是,每G磁碟空間需要32M記憶體。這樣,512M記憶體的系統,能支援16G的磁碟快取。你的情況當然會不同。記憶體需求依賴於如下事實:快取目標大小,CPU體系(32位或64位),同時線上的使用者數量,和你使用的特殊功能。
2.3 虛擬伺服器硬體環境
記憶體:512M
硬碟:8-10G
VM:1-2個,其中一個部署快取伺服器,一個部署web伺服器做測試用。
系統:Centos6.5 x86_64
2.4 虛擬伺服器實施部署前主機規劃列表
名稱 | 介面 | IP | 用途 |
---|---|---|---|
Squid server | eth0 | 192.168.0.190 | Squid |
Web server | eth0 | 192.168.0.220 | nginxWeb |
第3章 squid編譯與安裝
3.1 squid下載與解壓
1)下載squid軟體
[root@localhost ~]# wget http://www1.it.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE20.tar.gz
[root@localhost ~]# ls -l squid-3.0.STABLE20.tar.gz
-rw-r--r--. 1 root root 2452224 Oct 29 2009 squid-3.0.STABLE20.tar.gz
2)解開原始碼包
[root@localhost ~]# tar xf squid-3.0.STABLE20.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/squid-3.0.STABLE20/
[root@localhost squid-3.0.STABLE20]# pwd
/usr/src/squid-3.0.STABLE20
3.2 squid編譯前關鍵核心引數調整
3.2.1 調整檔案描述符
Squid在高負載下,需要大量的核心資源。特別的,你需要給你的系統配置比正常情況更高的檔案描述符和快取,最好在開始編譯squid之前來增加檔案描述符的大小(在系統安裝時我們已經講解過)。squid和核心通過資料結構來交換資訊,資料結構的大小不能超過設定的檔案描述符的限制。squid在執行時檢查這些設定,並且使用最安全的(最小的)值。
檔案描述符:
- 檔案描述符是一個簡單的整數,用以標明每一個被程序所開啟的檔案和socket。第一個開啟的檔案是0,第二個是1,依此類推。Unix作業系統通常給每個程序能開啟的檔案數量強加一個限制。更甚的是,unix通常有一個系統級的限制(1024).因為squid的工作方式,檔案描述符的限制可能會極大的影響效能。當squid用完所有的檔案描述符後,它不能接收使用者新的連線。也就是說,用完檔案描述符導致拒絕服務。直到一部分當前請求完成,相應的檔案和socket被關閉,squid不能接收新請求。當squid發現檔案描述符短缺時,它會發布警告。
- 在執行./configure之前,檢查你的系統的檔案描述符限制是否合適,能給你避免一些麻煩。大多數情況下,1024個檔案描述符足夠了。非常忙的cache可能需要4096或更多。在配置檔案描述符限制時,我推薦設定系統級限制的數量為每個程序限制的2倍。
[root@localhost squid-3.0.STABLE20]# cd ~
[root@localhost ~]# ulimit -n
1024
#1024這是linux系統預設情況的值
設定開啟的最大檔案描述符的數目
[root@localhost squid-3.0.STABLE20]# cd ~
[root@localhost ~]# ulimit -n
1024
[root@localhost ~]# ulimit -n 20480 #記得在squid執行前設定好該引數
[root@localhost ~]# ulimit -n
20480
[root@localhost ~]# echo "ulimit -n 20480" >> /etc/rc.local
[root@localhost ~]# tail -1 /etc/rc.local
ulimit -n 20480
3.2.2 調整臨時埠範圍
- 臨時埠是TCP/IP棧分配給出去連線的本地埠。換句話說,當squid發起一條連線到另一臺伺服器,核心給本地socket分配一個埠號。這些本地埠號有特定的範圍限制。
- 例如,Centos預設是32768-61000.
- 臨時埠號的短缺對非常慢的代理伺服器(例如每秒數百個連線)來說,會較大的影響效能。這是因為一些TCP連線在他們被關閉時進入TIME_WAIT狀態。當連線進入TIME_WAIT狀態時,臨時埠號不能被重用。
調整臨時埠範圍方法:
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
[root@localhost ~]# echo "net.ipv4.ip_local_port_range = 4000 65000" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.ip_local_port_range = 4000 65000
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range
4000 65000
3.3 squid編譯前檢視幫助
官方:http://www.squid-cache.org/Versions/v3/3.0/cfgman/
1)進入解壓後的squid目錄
[root@localhost squid-3.0.STABLE20]# more INSTALL #檢視編譯幫助
To build and install the Squid Cache, type:
% ./configure --prefix=/usr/local/squid #安裝過程總共3步
% make all
% make install
To run a Cache, you will need to:
1. customize the squid.conf configuration file:
% vi /usr/local/squid/etc/squid.conf #配置檔案
2. Initalise the cache:
% /usr/local/squid/sbin/squid -z #初始化快取
3. start the cache:
% /usr/local/squid/sbin/squid #啟動squid
If you want to use the WWW interface to the Cache Manager, copy
the cachemgr.cgi program into your httpd server's cgi-bin
directory.
3.4 squid編譯安裝
#先安裝依賴
yum -y install openssl-devel
##配置編譯環境
[root@localhost squid-3.0.STABLE20]# ./configure --prefix=/usr/local/squid3 --enable-async-io=100 --with-pthreads --enable-storeio="aufs,diskd,ufs" --enable-removal-policies="heap,lru" --enable-icmp --enable-delay-pools --enable-useragent-log --enable-referer-log --enable-kill-parent-hack --enable-cachemgr-hostname=localhost --enable-arp-acl --enable-default-err-language=English --enable-err-languages="Simplify_Chinese English" --disable-poll --disable-wccp --disable-wccpv2 --disable-ident-lookups --disable-internal-dns --enable-basic-auth-helpers="NCSA" --enable-stacktrace --with-large-files --disable-mempools --with-filedescriptors=64000 --enable-ssl --enable-x-acceletator-vary --disable-snmp --with-aio --enable-linux-netfilter --enable-linux-tproxy
#編譯
[root@localhost squid-3.0.STABLE20]# make
#安裝
[root@localhost squid-3.0.STABLE20]# make install
#把安裝目錄做成軟連線
[root@localhost ~]# ln -s /usr/local/squid3/ /usr/local/squid
[root@localhost ~]# ll -d /usr/local/squid
lrwxrwxrwx. 1 root root 18 Sep 17 20:02 /usr/local/squid -> /usr/local/squid3/
3.5 squid目錄檔案結構介紹
在安裝完後,將在squid的安裝目錄裡(/usr/local/squid/)會看到下列目錄和檔案:
[root@localhost squid]# tree -L 2 /usr/local/squid
/usr/local/squid
├── bin
│ ├── RunAccel
│ ├── RunCache
│ └── squidclient
├── etc
│ ├── cachemgr.conf
│ ├── cachemgr.conf.default
│ ├── mime.conf
│ ├── mime.conf.default
│ ├── squid.conf
│ └── squid.conf.default
├── libexec
│ ├── cachemgr.cgi
│ ├── diskd
│ ├── dnsserver
│ ├── ncsa_auth
│ ├── pinger
│ └── unlinkd
├── sbin
│ └── squid
├── share
│ ├── errors
│ ├── icons
│ ├── man
│ └── mib.txt
└── var
└── logs
10 directories, 17 files
為了讓同學們理解的更清楚明白,我們把這些內容列成了如下表格:
檔名/目錄名 | 功能描述 |
---|---|
sbin | squid主從程式的目錄,正常只能被root啟動 |
sbin/squid | Squid的主程式 |
bin | bin目錄包含對所有使用者可用的程式 |
bin/RunCache | RunCache是一個shell指令碼,你能用它來啟動squid。假如squid死掉,該指令碼自動重啟它,除非它檢測到經常的重啟 |
bin/RunAccel | RunAccel與RunCache幾乎一致,唯一不同是它增加了一個命令列引數,告訴squid在哪裡偵聽HTTP請求 |
bin/squidclient | squidclient是個簡單的HTTP客戶端程式,你能用它來測試squid。它也有一些特殊功能,用以對執行的squid程序發起管理請求。 |
libexec | libexec目錄包含了輔助程式。有一些命令你不能正常的啟動。然而,這些程式通常被其他程式啟動 |
libexec/unlinkd | unlinkd是一個輔助程式,它從cache目錄裡刪除檔案 |
libexec/cachemgr.cgi | cachemgr.cgi是Squid管理功能的CGI介面。為了使用它,你需要拷貝該程式到你的WEB伺服器的cgi-bin目錄 |
libexec/diskd(optional) | 假如你指定了--enable-storeio=diskd,你才能看到它 |
libexec/pinger(optional) | 假如你指定了--enable-icmp,你才能看到它 |
etc | etc目錄包含squid的配置檔案 |
etc/squid.conf | 這是squid的主配置檔案 |
var | var目錄包含了不是很重要的和經常變化的檔案。這些檔案不必正常的備份他們 |
var/logs | var/logs目錄是squid不同日誌檔案的預設位置。當你第一次安裝squid時,它是空的。一旦squid開始執行,你能在這裡看到名字為access.log,cache.log和store.log這樣的檔案 |
var/cache | 假如你不在squid.conf檔案裡指定,這是預設的快取目錄(cache_dir) |
第4章 squid配置介紹
4.1 squid.conf語法
- Squid的配置檔案相對規範。它與其他許多unix程式相似。每行以配置指令開始,後面跟著數字值或關鍵字。在讀取配置檔案時,squid忽略空行和註釋掉的行(以#開始)。
- 預設的squid.conf內容有相當多的內容,如下:
[root@localhost ~]# cd /usr/local/squid/etc/
[root@localhost etc]# wc -l squid.conf
4863 squid.conf
#去掉以#開頭的註釋和空行(以#開頭!)
[root@localhost etc]# egrep -v "^#|^$" squid.conf.default > squid.conf
[root@localhost etc]# cat squid.conf | wc -l
37
[root@localhost etc]# cat squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
htcp_access allow localnet
htcp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /usr/local/squid3/var/logs/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /usr/local/squid3/var/cache
4.2 squid服務的使用者
- 幾乎所有的unix程序和檔案擁有檔案的組和屬主的屬性,你必須建立一個使用者和組給squid服務,該使用者和組的組合,必須對大部分squid相關的檔案和目錄有讀和寫的許可權,所以需要建立“squid”的使用者和組,這避免了某人利用squid來讀取系統中的其他檔案。
- 執行squid必須以root身份執行,設定配置檔案squid.conf中。cache_effective_user為squid來執行,這個使用者和組的名稱理論上可以任意起。
1)建立squid使用者和組,禁止其登陸
[root@localhost etc]# useradd -s /sbin/nologin -M squid
2)編輯配置檔案squid.conf
#設定啟動賬戶為squid
[root@localhost etc]# echo "cache_effective_user squid" >> /usr/local/squid/etc/squid.conf
[root@localhost etc]# tail -1 /usr/local/squid/etc/squid.conf
cache_effective_user squid
#設定啟動賬戶組為squid
[root@localhost etc]# echo "cache_effective_group squid" >> /usr/local/squid/etc/squid.conf
[root@localhost etc]# tail -1 /usr/local/squid/etc/squid.conf
cache_effective_group squid
#開啟store日誌
[root@localhost etc]# echo "cache_store_log /usr/local/squid/var/logs/store.log" >> /usr/local/squid/etc/squid.conf
[root@localhost etc]# tail -1 /usr/local/squid/etc/squid.conf
cache_store_log /usr/local/squid/var/logs/store.log #快取物件日誌
#開啟cache日誌
[root@localhost etc]# echo "cache_log /usr/local/squid/var/logs/cache.log" >> /usr/local/squid/etc/squid.conf
[root@localhost etc]# tail -1 /usr/local/squid/etc/squid.conf
cache_log /usr/local/squid/var/logs/cache.log
#開啟磁碟快取cache_dir
[root@localhost etc]# echo "cache_dir ufs /usr/local/squid/var/cache 100 16 256" >> /usr/local/squid/etc/squid.conf
[root@localhost etc]# tail -1 /usr/local/squid/etc/squid.conf
cache_dir ufs /usr/local/squid/var/cache 100 16 256
4.3 squid埠號
- http_port指令告訴squid在哪個埠偵聽HTTP請求。預設埠是3128:
- 假如你計劃將squid作為web服務加速器執行,可以將該埠設定為80.
可以使用附加的http_port行,來指示squid偵聽在多個埠上,例如,來自某個部門的瀏覽器傳送請求到3128,然而另一個部門使用80埠。簡單的將兩個埠號列舉出來:
http_port | 3128 |
---|---|
http_port | 8080 |
也可以使用http_port指令來使squid偵聽在指定的介面地址上,當squid作為防火牆執行時,它有兩個網路介面:一個內部的和一個外部的,為了避免來自外部的http請求,使squid僅僅偵聽在內部介面上,簡單的將IP地址放在埠號的前面:
#squid 僅監聽內網地址,拒絕外部Http請求訪問
http_port 192.168.1.1:3128
4.4 squid日誌檔案
- squid預設的日誌目錄是squid安裝位置下的logs目錄。例如,假如你在./configure中沒有使用--prefix=選項,那麼預設的日誌檔案路徑是/usr/local/squid/var/logs,必須確認日誌檔案所存放的磁碟位置空間足夠。在squid寫日誌時如果接受到錯誤,它會退出和重啟。該行為的主要理由應引起你的注意,squid想確認你不會丟失任何重要的日誌資訊,特別是你的系統被濫用或者被攻擊時。
squid有三個主要的日誌檔案:cache.log,access.log,store.log。
4.4.1 cache.log日誌檔案
cache.log包含多種訊息,例如Squid的配置資訊,效能警告,以及嚴重錯誤。如下是cache.log的輸出樣本:主要的錯誤和異常條件最可能報告在cache.log裡。
剛開始執行squid時,需要密切關注該檔案。假如squid拒絕執行,原因也許會出現在cache.log檔案的結尾處。在正常條件下,該檔案不會變得很大。假如你以-s選項來執行squid,重要的cache.log資訊也可被送到你的rsyslog程序。通過使用cache_log指令,你以修改配置檔案squid.conf來改變該日誌檔案的路徑。
4.4.2 轉發cache.log訊息到系統日誌
為了讓squid傳送cache.log訊息的拷貝到系統日誌,請使用-s命令列選項。僅僅在debug級別0和1的訊息會被轉發。
4.4.3 access.log日誌檔案
- Squid把關於HTTP事務的關鍵資訊存放在access.log裡。該檔案是基於行的,也就是說每行對應一個客戶端請求。squid記錄客戶端IP(或主機名),請求URL,響應size等其他資訊。
- Squid在access.log裡記錄所有HTTP訪問,除了那些在還沒有傳送資料前就斷開的連線。Squid也記錄所有的ICP(非HTCP)事務,除非你使用log_icp_queries指令關閉了這個功能。
- 預設的access.log格式包含了10個域。如下是日誌樣本,長行分割並且縮排排版。
- access.log檔案記錄了對squid發起的每個客戶請求。每行平均約150個位元組,也就是說,在接受一百萬條客戶請求後,它的體積約是150M。可以使用cache_access_log指令改變該日誌檔案的路徑:
- 如果不想squid記錄客戶端請求日誌,修改日誌檔案的路徑為/dev/null即可。
4.4.4 store.log日誌檔案
- store.log記錄Squid關於儲存或刪除cache目標的決定。對每個存在cache裡的目標每個不可cache的目標,以及每個被輪換策略刪除的目標,Squid都會建立相應的日誌條目。該日誌檔案內容既包含了記憶體cache,又包含了磁碟cache。
- store.log檔案對大多數cache管理員來說並非很有用,但是我們可以通過這個日誌來解析客戶端訪問的資料是否被快取,它包含了進入和離開快取的每個目標的記錄。使用cache_store_log指令來改變它的位置:
- 通過指定路徑為none,你能輕易的完全禁止store.log日誌:
- Squid的日誌檔案增加沒有限制...為了保證日誌檔案大小合理,應建立計劃任務來規律的重新命名和打包日誌。squid有內建的日誌回滾功能,也可以避免單個日誌過於龐大。
4.5 squid的訪問控制
ACL元素是Squid的訪問控制基礎。這裡會告訴你如何指定包括IP地址,埠號,主機名,和URL匹配等變數。每個ACL元素有個名字,在編寫訪問控制規則時需要引用他們。
- 基本的ACL元素語法如下:
acl name type value1 value2 ...
#例如:
acl Workstations src 10.0.0.0/16 #表示源地址匹配10.0.0.0/16網段
在多數情況下,你能對一個ACL元素列舉多個值。你也可以有多個ACL行。例如,下列兩行配置是等價的:
acl Http_ports port 80 8000 8080
#提示:三個埠是或的關係,or
上面一行與下面三行等價
acl Http_ports port 80
acl Http_ports port 8000
acl Http_ports port 8080
4.5.1 IP地址的acl定義
使用物件:src,dst,myip
squid在ACL裡指定IP地址時,擁有強有力的語法。你能以子網,地址範圍形式編寫地址。squid支援標準IP地址寫法(由“.”連線的4個小於256的數字)。另外,假如你忽略掩碼,squid會自動計算相應的掩碼。例如,下組是相等的:
acl Bar src 172.16.66.0/255.255.255.0
acl Bar src 172.16.66.0/24
acl Squid dst www.squid-cache.org
將ACl主機名轉換到IP地址的過程會延緩squid的啟動。除非絕對必要,請避免使用主機名。
4.5.2 域名的acl定義
使用物件:srcdomain,dstdomain和cache_host_domain指令
域名簡單的就是DNS名字或區域。例如,下面是有效的域名:
www.squid-cache.org
squid-cache.org
org
- 域名ACL有點深奧,因為相對於匹配域名和子域有點微妙的差別。當ACL域名以“.”開頭,squid將它作為萬用字元,它匹配在該域的任何主機名,甚至域名自身。相反的,如果ACL域名不以“.”開頭,squid使用精確的字串比較,主機名同樣必須被嚴格檢查。
- 域名匹配可能讓人迷惑,所以繼續往下看,以便你可以真正理解它。如下是兩個稍微不同的ACL。
acl A dstdomain foo.com
acl B dstdomain .foo.com
- 使用者對http://www.foo.com/的請求匹配ACL B,但不匹配A。ACL A要求嚴格的字串匹配,然而ACL B 裡領頭的點就像萬用字元。
- 另外,使用者對http://foo.com/的請求同時匹配A和B。儘管在URL主機名裡的foo.com前面沒有字元,但ACL B裡領頭的點仍然導致一個匹配。
4.5.3 正則表示式的acl定義
使用物件:srcdom_regex,dstdom_regex,url_regex,urlpath_regex,browser,referer_regex,ident_regex,proxy_auth_regex,req_mime_type,rep_mime_type
大量的ACL使用正則表示式來匹配字串。對squid來說,最常使用的正則表示式功能用以匹配字串的開頭或結尾。例如,^字元是特殊元字元,它匹配行或字串的開頭:
-
[x] :^http://
- 該正則表示式匹配任意以http://開頭的URL。$也是特殊的元字元,因為它匹配行或字串的結尾
-
[x] :.jpg$
- 實際上,該示例也有些錯誤,因為.字元也是特殊元字元。它是匹配任意單個字元的萬用字元。我們實際想要的應該是,見下行:
-
[x] :\.jpg$
- 反斜槓對這個“.”進行轉義。該正則表示式匹配以.jpg結尾的任意字串。假如你不使用^或$字元,正則表示式的行為就象標準子串搜尋。他們匹配在字串裡任何位置出現的單詞或片語。
- 對所有的squid正則表示式類,你可以使用大小寫敏感的選項。匹配是預設大小寫敏感的。為了大小寫不敏感,在ACL型別後面使用-i選項。例如:
acl Foo url_regex -i ^http://www
4.5.4 TCP埠號的acl定義
使用物件:port,myport
該型別是相對的。值是個別的埠號或埠範圍。回想一下TCP埠號是16位值,這樣它的值必須大於0或小於65536。如下是一些示例:
acl Foo port 123
acl Bar port 1-1024
acl Foo port 123 80 443
參考:http://home.arcor.de/jeffpang/squid/chap06.html
4.5.5 method的acl定義
method ACL 指HTTP請求方法。GET是典型的最常用方法,接下來是POST,PUT,和其他。下例說明如何使用method ACL:
acl Uploads method PUT POST
注意:CONNECT方法非常特殊。它是用於通過HTTP代理來封裝某種請求的方法。在處理CONNECT方法和遠端伺服器的埠號時應特別謹慎。就像前面章節講過的一樣,你不希望squid連線到某些遠端服務。你該限制CONNECT方法僅僅能連線到HTTPS/SSL或NNTPS埠(443或563).預設的squid.conf這樣做:
acl CONNECT method CONNECT
acl SSL_ports 443 563
http_access allow CONNECT SSL_ports #限制CONNECT方法僅僅能連線到HTTPS/SSL
http_access deny CONNECT
PURGE 是另一個特殊的請求方法。它是Squid的專有方法,沒有在任何RFC裡定義。它讓管理員能強制刪除快取物件。既然該方法有些危險,squid預設拒絕PURGE請求,除非你定義了ACL引用該方法。否則,任何能訪問cache者也許能夠刪除任意快取物件。在這裡,我建議僅僅允許來自localhost的PURGE。
acl Purge method PURGE
acl localhost src 127.0.0.1/32
http_access allow Purge Localhost
http_access deny Purge
4.5.6 proto的acl定義
該型別指URI訪問(或傳輸)協議。如下是有效值:http,https(same as HTTP/TLS),ftp,gopher,urn,whois和cache_object。也就是說,這些是被squid支援的URL機制名字。例如,假如你想拒絕所有的FTP請求,你可使用下列指令:
acl FTP proto FTP
http_access deny FTP
cache_object機制是squid的特性。它用於訪問squid的快取管理介面,不幸的是,它並非好名字,可能會被改變。預設的squid.conf檔案有許多行限制快取管理訪問:
acl Manager proto cache_object
acl Localhost src 127.0.0.1
http_access allow Manager Localhost
http_access deny Manager
4.5.7 url_regex的acl定義
url_regex ACL用於匹配請求URL的任何部分,包括傳輸協議和原始伺服器主機名。例如,如下ACL匹配從FTP伺服器的MP3檔案請求:
acl FTPMP3 url_regex -i ^ftp://.*\.mp3$
acl sex url_regex -i ^http://.*sex.*
4.5.8 urlpath_regex的acl定義
urlpath_regex與url_regex非常相似,不過傳輸協議和主機名不包含在匹配條件裡。這讓某些型別的檢測非常容易。例如,假設你必須拒絕URL裡的"sex",但仍允許在主機名裡含有"sex"的請求,那麼這樣做:
acl Sex urlpath_regex sex
http_access deny Sex
另一個例子,假如你想特殊處理cgi-bin請求,你能這樣捕獲它們:
acl CGI1 urlpath_regex ^/cgi-bin
當然,CGI程式並非總在/cgi-bin/目錄下,這樣你應該編寫其他的ACL來捕獲它們。
4.5.9 更多acl定義見squid配置檔案
(1)限制同一IP客戶端的最大連線數
acl OverConnLimit maxconn 16 #定義連線數16
http_access deny OverConnLimit #拒絕達到16個的
(2)防止天涯盜鏈,轉嫁給百度
acl tianya referer_regex -i tianya #referer含有tianya
http_access deny tianya #拒絕
deny_info http://www.baidu.com/logs.gif tianya #拒絕資訊回百度
(3)防止被人利用為HTTP代理,設定允許訪問的IP地址
acl myip dst 192.168.1.1
http_access deny !myip
(4)防止百度機器人爬死伺服器
acl AntiBaidu req_header User-Agent Baiduspider
http_access deny AntiBaidu
(5)允許本地管理
acl Manager proto cache_object
acl Localhost src 127.0.0.1 192.168.1.1
http_access allow Manger Localhost
提示:
更多acl定義及用法請見acl配置檔案401行到603行
sed -n '401,603p' /usr/local/squid/etc/squid.conf.default
4.6 Squid如何匹配訪問控制元素
理解squid如何搜尋ACL元素去匹配是很重要的。當ACL元素有多個值時,任何單個值能導致匹配。也就是說,squid在檢查ACL元素值時使用OR邏輯。當squid找到第一個值匹配時,它停止搜尋。這意味著把最可能匹配的值放在列表開頭處,能減少延時。
重點強調:
(1)squid在搜尋ACL元素時使用的"或"邏輯。在acl裡的任何單值都可以導致匹配。
(2)而應用訪問規則恰好相反。對http_access和其他規則設定,squid使用"與"邏輯。
squid預設的配置檔案拒絕每一個客戶請求。在任何人能使用代理之前,你必須在squid.conf檔案里加入附加的訪問控制規則。最簡單的方法就是定義一個針對客戶IP地址的ACL和一個訪問規則,告訴squid允許來自這些地址的HTTP請求。squid有許多不同的ACL型別。src型別匹配客戶IP地址,squid會針對客戶HTTP請求檢查http_access規則。這樣,你就需要增加兩行:
acl MyNetwork src 192.168.0.0/16
http_access allow MyNetwork
這兩行需要放在正確的位置。http_access的順序非常重要,但是acl行的順序不必介意。squid預設的配置檔案包含了一些重要的訪問控制,最好不要改變或刪除它們,除非你完全理解他們的意義。在你第一次編輯squid.conf檔案時,請看如下注釋:
#INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
在該註釋之後,以及"http_access deny all"之前插入你自己的規則,即MyNetwork的定義,如下是:
一個典型的ACL設定,請大家用心理解。
#定義squid acl訪問控制規則
acl Safe_ports port 80
acl SSL_ports port 443
acl lannet src 10.0.0.0/24
acl localhost src 127.0.0.1/255.255.255.255
acl webip dst 10.0.0.8
acl webdomain dstdomain .yunjisuan.com
acl manager proto cache_object
acl CONNECT method CONNECT
#應用squid acl訪問控制規則
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
acl MyNetwork src all
http_access allow MyNetwork
http_access allow lannet
http_access deny all
#關於acl all src 0.0.0.0/0.0.0.0,在squid 3裡,已經預設定義了all範圍,所以不需要像squid 2.x那樣手動定義all了
4.7 squid可見主機名
- 如果不設定可見主機名,squid可能會報錯無法執行。
- 設定主機名有如下好處:
- 主機名出現在squid的錯誤訊息裡,這幫助使用者驗證潛在問題的源頭。
- 主機名出現在squid轉發的cache單元的HTTP Via頭裡。當請求到達原始主機時,Via頭包含了在傳輸過程中涉及的代理列表。squid也使用Via頭來檢測轉發環路。
- 通過修改squid配置檔案squid.conf中visible_hostname欄位,可修改可見主機名:
[root@localhost etc]# sed -n '2965,2987p' /usr/local/squid/etc/squid.conf.default
#
#Default:
# httpd_suppress_version_string off
# TAG: visible_hostname
# If you want to present a special hostname in error messages, etc,
# define this. Otherwise, the return value of gethostname()
# will be used. If you have multiple caches in a cluster and
# get errors about IP-forwarding you must set them to have individual
# names with this setting.
#
#Default:
# none
# TAG: unique_hostname
# If you want to have multiple machines with the same
# 'visible_hostname' you must give each machine a different
# 'unique_hostname' so forwarding loops can be detected.
#
#Default:
# none
visible_hostname www.yunjisuan.com
#如果不指定可見主機名,那麼系統會返回squid服務的主機名(也可能導致服務無法啟動)
編輯squid.conf配置檔案,新增可見主機名
[root@localhost etc]# echo "visible_hostname www.yunjisuan.com" >> /usr/local/squid/etc/squid.conf
[root@localhost etc]# tail -1 /usr/local/squid/etc/squid.conf
visible_hostname www.yunjisuan.com
4.8 squid管理聯絡資訊
設定cache_mgr指令作為對使用者的幫助,它是一個email地址,假如故障發生,使用者能寫信給管理員來通知管理員,cache_mgr地址默認出現在squid的錯誤訊息裡,修改配置檔案squid.conf中cache_mgr欄位。
cache_mgr [email protected]
編輯squid.conf配置檔案,新增郵件聯絡人資訊
[root@localhost etc]# echo "cache_mgr 215379068@qq.com" /usr/local/squid/etc/squid.conf
[root@localhost etc]# tail -1 /usr/local/squid/etc/squid.conf
cache_mgr [email protected]
4.9 squid最終的配置檔案
根據以上的設定之後,squid.conf的內容如下:
[root@localhost etc]# cat /usr/local/squid/etc/squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
htcp_access allow localnet
htcp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /usr/local/squid3/var/logs/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /usr/local/squid3/var/cache
#以下是新增的修改內容
cache_effective_user squid #程式執行賬戶
cache_effective_group squid #程式執行賬戶組
cache_store_log /usr/local/squid/var/logs/store.log #store日誌
cache_log /usr/local/squid/var/logs/cache.log #cache日誌
cache_dir ufs /usr/local/squid/var/cache 100 16 256 #cache快取
visible_hostname www.yunjisuan.com #可見主機名
cache_mgr 215379068@qq.com #郵件聯絡人
第5章 執行squid並實現squid的普通代理模式
5.1 Squid主程式命令列選項
在執行squid前,需要了解squid主程式命令列選項。執行如下命令可以獲得系統幫助:
[root@localhost etc]# /usr/local/squid/sbin/squid -h
Usage: squid [-cdhvzCDFNRVYX] [-s | -l facility] [-f config-file] [-[au] port] [-k signal]
-a port Specify HTTP port number (default: 3128).
-d level Write debugging to stderr also.
-f file Use given config-file instead of #指定配置檔案啟動;重要
/usr/local/squid3/etc/squid.conf
-h Print help message.
-k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse #控制服務執行狀態;重要
Parse configuration file, then send signal to
running copy (except -k parse) and exit.
-s | -l facility
Enable logging to syslog.
-u port Specify ICP port number (default: 3130), disable with 0.
-v Print version.
-z Create swap directories #初始化快取;重要
-C Do not catch fatal signals.
-D Disable initial DNS tests. #禁止DNS解析;重要
-F Dont serve any requests until store is rebuilt.
-N No daemon mode. #不啟用後臺模式
-R Do not set REUSEADDR on port.
-S Double-check swap during rebuild.
-X Force full debugging. #強制debug模式
-Y Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.
5.2 檢查配置檔案語法
/usr/local/squid/sbin/squid -k parse 檢查語法的命令
[root@localhost etc]# /usr/local/squid/sbin/squid -k parse #檢查語法
2017/09/18 05:17:06| Processing Configuration File: /usr/local/squid3/etc/squid.conf (depth 0)
2017/09/18 05:17:06| Initializing https proxy context
WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log
/usr/local/squid/var/logs/cache.log: Permission denied #出現錯誤,許可權拒絕
messages will be sent to 'stderr'.
[root@localhost etc]# ll -d /usr/local/squid/var/logs #檢視目錄許可權
drwxr-xr-x. 2 root root 4096 Sep 17 19:59 /usr/local/squid/var/logs #沒有授權程式使用者訪問
[root@localhost etc]# chown -R squid /usr/local/squid/var/logs #遞迴授權屬主為squid
[root@localhost etc]# /usr/local/squid/sbin/squid -k parse #再次檢查語法
2017/09/18 05:19:36| Processing Configuration File: /usr/local/squid3/etc/squid.conf (depth 0)
2017/09/18 05:19:36| Initializing https proxy context
5.3 初始化cache目錄
在執行squid之前,或者增加了新的cache_dir,你必須初始化cache,命令為:squid -z
1)設定環境變數,或者做命令的軟連線
[root@localhost squid]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@localhost squid]# ln -s /usr/local/squid/bin/* /usr/local/bin/
[root@localhost squid]# which squid
/usr/local/sbin/squid
2)初始化cache
[root@localhost squid]# squid -z #初始化快取命令
2017/09/18 05:26:07| Creating Swap Directories
FATAL: Failed to make swap directory /usr/local/squid/var/cache: (13) Permission denied #報錯,許可權拒絕
[root@localhost squid]# ll -d /usr/local/squid/var/ #原來是目錄對於程式使用者沒有許可權
drwxr-xr-x. 3 root root 4096 Sep 17 19:59 /usr/local/squid/var/
[root@localhost squid]# chown -R squid /usr/local/squid/var/ #授權程式使用者squid
[root@localhost squid]# squid -z #再次初始化cache
2017/09/18 05:27:00| Creating Swap Directories
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/00
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/01
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/02
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/03
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/04
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/05
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/06
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/07
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/08
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/09
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/0A
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/0B
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/0C
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/0D
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/0E
2017/09/18 05:27:00| Making directories in /usr/local/squid/var/cache/0F
5.4 光碟安裝一些必須的工具
[root@localhost squid]# yum -y install tree telnet dos2unix
檢視快取目錄
[root@localhost squid]# tree /usr/local/squid/var/cache/
5.5 在終端窗口裡測試啟動squid
初始化cache目錄後,就可以在終端窗口裡執行squid,將日誌記錄到標準日子裡,就可以輕易的定位任何錯誤或問題,並且確認squid是否成功啟動。
[root@localhost squid]# squid -N -d1 #以debug除錯模式在前臺啟動squid
2017/09/18 05:37:01| Starting Squid Cache version 3.0.STABLE20 for x86_64-unknown-linux-gnu...
2017/09/18 05:37:01| Process ID 59661
2017/09/18 05:37:01| With 4096 file descriptors available
2017/09/18 05:37:01| Performing DNS Tests...
2017/09/18 05:37:02| Successful DNS name lookup tests...
2017/09/18 05:37:02| helperOpenServers: Starting 5/5 'dnsserver' processes
2017/09/18 05:37:02| User-Agent logging is disabled.
2017/09/18 05:37:02| Referer logging is disabled.
2017/09/18 05:37:02| Unlinkd pipe opened on FD 14
2017/09/18 05:37:02| Swap maxSize 102400 + 8192 KB, estimated 8507 objects
2017/09/18 05:37:02| Target number of buckets: 425
2017/09/18 05:37:02| Using 8192 Store buckets
2017/09/18 05:37:02| Max Mem size: 8192 KB
2017/09/18 05:37:02| Max Swap size: 102400 KB
2017/09/18 05:37:02| Rebuilding storage in /usr/local/squid/var/cache (DIRTY)
2017/09/18 05:37:02| Using Least Load store dir selection
2017/09/18 05:37:02| Set Current Directory to /usr/local/squid3/var/cache
2017/09/18 05:37:02| Loaded Icons.
2017/09/18 05:37:02| Accepting HTTP connections at 0.0.0.0, port 3128, FD 15.
2017/09/18 05:37:02| Accepting ICP messages at 0.0.0.0, port 3130, FD 16.
2017/09/18 05:37:02| HTCP Disabled.
2017/09/18 05:37:02| Pinger socket opened on FD 18
2017/09/18 05:37:02| Ready to serve requests. #出現這個表示啟動成功!
2017/09/18 05:37:03| Done scanning /usr/local/squid/var/cache swaplog (0 entries)
2017/09/18 05:37:03| Finished rebuilding storage from disk.
2017/09/18 05:37:03| 0 Entries scanned