您好,登錄后才能下訂單哦!
suid 下載及安裝
1. squid 安裝硬件要求
Squid運(yùn)行在所有流行的Unix系統(tǒng)上,也可以在Microsoft Windows上運(yùn)行。盡管squid的Windows支持在不斷改進(jìn),但也許在Unix上容易一些。假如你有一個(gè)喜歡的操作系統(tǒng),我建議你使用那個(gè)。否則,假如你找人推薦,我很喜歡FreeBSD。
squid對(duì)硬件要求不算高。內(nèi)存是最重要的資源。內(nèi)存短缺會(huì)嚴(yán)重影響性能。磁盤(pán)空間也是另一個(gè)重要因素。更多的磁盤(pán)空間意味著更多的緩存目標(biāo)和更高的命中率??焖俚拇疟P(pán)和驅(qū)動(dòng)器也是有利的。如果你舍得花錢(qián),SCSI磁盤(pán)比ATA的執(zhí)行性能好。當(dāng)然快速的CPU也是好的,但它并不是提高性能的關(guān)鍵因素。
因?yàn)閟quid對(duì)每個(gè)緩存響應(yīng)使用少數(shù)內(nèi)存,因此在磁盤(pán)空間和內(nèi)存要求之間有一定聯(lián)系。基本規(guī)則是,每G磁盤(pán)空間需要32M內(nèi)存。這樣,512M內(nèi)存的系統(tǒng),能支持16G的磁盤(pán)緩存。你的情況當(dāng)然會(huì)不同。內(nèi)存需求依賴(lài)于如下事實(shí):緩存目標(biāo)大小,CPU體系(32位或64位),同時(shí)在線的用戶(hù)數(shù)量,和你使用的特殊功能。
人們經(jīng)常問(wèn)如此問(wèn)題:“我的網(wǎng)絡(luò)有X個(gè)用戶(hù),需要配備什么樣的硬件給squid?”因?yàn)樵S多理由,這樣的問(wèn)題好難回答。特別的,很難說(shuō)X個(gè)用戶(hù)將產(chǎn)生多少流量。我告訴人們?nèi)ソ⒁粋€(gè)有足夠磁盤(pán)空間,可存儲(chǔ)3-7天web流量數(shù)據(jù)的系統(tǒng)。例如,假如你的用戶(hù)每天8小時(shí)耗費(fèi)1M流量(僅僅HTTP和FTP傳輸),那就是每天大約3.5G。所以,我可以說(shuō),每兆web傳輸你需要10到25G的磁盤(pán)空間。
2.2.squid 下載及安裝
2.2.1.squid 下載地址
http://www.squid-cache.org/
2.2.3.安裝前準(zhǔn)備
1) 文件描述符修改
文件描述符是一個(gè)簡(jiǎn)單的整數(shù),用以標(biāo)明每一個(gè)被進(jìn)程所打開(kāi)的文件和socket。第一個(gè)打開(kāi)的文件是0,第二個(gè)是1,依此類(lèi)推。Unix操作系統(tǒng)通常給每個(gè)進(jìn)程能打開(kāi)的文件數(shù)量強(qiáng)加一個(gè)限制。更甚的是,unix通常有一個(gè)系統(tǒng)級(jí)的限制。
因?yàn)閟quid的工作方式,文件描述符的限制可能會(huì)極大的影響性能。當(dāng)squid用完所有的文件描述符后,它不能接收用戶(hù)新的連接。也就是說(shuō),用完文件描述符導(dǎo)致拒絕服務(wù)。直到一部分當(dāng)前請(qǐng)求完成,相應(yīng)的文件和socket被關(guān)閉,squid不能接收新請(qǐng)求。當(dāng)squid發(fā)現(xiàn)文件描述符短缺時(shí),它會(huì)發(fā)布警告。
在運(yùn)行./configure之前,檢查你的系統(tǒng)的文件描述符限制是否合適,能給你避免一些麻煩。大多數(shù)情況下,1024個(gè)文件描述符足夠了。非常忙的cache可能需要4096或更多。在配置文件描述符限制時(shí),我推薦設(shè)置系統(tǒng)級(jí)限制的數(shù)量為每個(gè)進(jìn)程限制的2倍。
通常在你的Unix shell中能找到系統(tǒng)的文件描述符限制。所有的C shell及其類(lèi)似的shell有內(nèi)建的limit命令。更新的Bourne shell及其類(lèi)似的shell有一條叫做ulimit的命令。為了發(fā)現(xiàn)你的系統(tǒng)的文件描述符限制。
方法一:
ulimit -SHn 20480
方法二:
vi /etc/security/limits.conf
* - nofile 20480
2)調(diào)整臨時(shí)端口范圍
臨時(shí)端口是TCP/IP棧分配給出去連接的本地端口。換句話說(shuō),當(dāng)squid發(fā)起一條連接到另一臺(tái)服務(wù)器,內(nèi)核給本地socket分配一個(gè)端口號(hào)。這些本地端口號(hào)有特定的范圍限制。例如,在FreeBSD上,默認(rèn)的臨時(shí)端口范圍是1024-5000。
臨時(shí)端口號(hào)的短缺對(duì)非常忙的代理服務(wù)器(例如每秒數(shù)百個(gè)連接)來(lái)說(shuō),會(huì)較大的影響性能。這是因?yàn)橐恍㏕CP連接在它們被關(guān)閉時(shí)進(jìn)入TIME_WAIT狀態(tài)。當(dāng)連接進(jìn)入TIME_WATI狀態(tài)時(shí),臨時(shí)端口號(hào)不能被重用。
查看本地端口范圍:
#cat /proc/sys/net/ipv4/ip_local_port_range
#32768 61000
修改臨時(shí)端口范圍:
#echo "net.ipv4.ip_local_port_range = 4000 65000" >> /etc/sysctl.conf
#sysctl -p
2.3.4 安裝
# tar -zxf squid-3.0.STABLE26.tar.gz
#./configure --prefix=/usr/local/squid --enable-storeio=ufs,aufs --enable-icmp
# make
# make install
2.3.5.目錄結(jié)果說(shuō)明:
# 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
│ ├── pinger
│ └── unlinkd
├── sbin
│ └── squid
├── share
│ ├── errors
│ ├── icons
│ ├── man
│ └── mib.txt
└── var
└── logs
sbin
sbin目錄的程序正常只能被root啟動(dòng)
sbin/squid
Squid的主程序
bin
bin目錄包含對(duì)所有用戶(hù)可用的程序
bin/RunCache
RunCache是一個(gè)shell腳本,你能用它來(lái)啟動(dòng)squid。假如squid死掉,該腳本自動(dòng)重啟它,除非它檢測(cè)到經(jīng)常的重啟。RunCache是一個(gè)時(shí)間遺留的產(chǎn)物,那時(shí)Squid還不是后臺(tái)服務(wù)進(jìn)程。在最近的版本里,RunCache很少用到,因?yàn)镾quid自動(dòng)重啟它自身,當(dāng)你不使用-N選項(xiàng)時(shí)。
bin/RunAccel
RunAccel與RunCache幾乎一致,唯一的不同是它增加了一個(gè)命令行參數(shù),告訴squid在哪里偵聽(tīng)HTTP請(qǐng)求。
bin/squidclient
squidclient是個(gè)簡(jiǎn)單的HTTP客戶(hù)端程序,你能用它來(lái)測(cè)試squid。它也有一些特殊功能,用以對(duì)運(yùn)行的squid進(jìn)程發(fā)起管理請(qǐng)求。
libexec
libexec目錄傳統(tǒng)的包含了輔助程序。有一些命令你不能正常的啟動(dòng)。然而,這些程序通常被其他程序啟動(dòng)。
libexec/unlinkd
unlinkd是一個(gè)輔助程序,它從cache目錄里刪除文件。如你后面看到的一樣,文件刪除是個(gè)性能瓶頸。通過(guò)在外部進(jìn)程里執(zhí)行刪除操作,Squid提升了一些執(zhí)行性能。
libexec/cachemgr.cgi
cachemgr.cgi是Squid管理功能的CGI接口。為了使用它,你需要拷貝該程序到你的WEB服務(wù)器的cgi-bin目錄。在14.2章中有更多描述。
libexec/diskd(optional)
假如你指定了--enable-storeio=diskd,你才能看到它。
libexec/pinger(optional)
假如你指定了--enable-icmp,你才能看到它。
etc
etc目錄包含squid的配置文件。
etc/squid.conf
這是squid的主要配置文件。初始的該文件包含了大量的注釋?zhuān)靡越忉屆恳粋€(gè)選項(xiàng)做什么。在你理解了這些配置指令后,建議你刪除這些注釋?zhuān)屌渲梦募『透菀组喿x。注意假如該文件存在,安裝過(guò)程不會(huì)覆蓋該文件。
etc/squid.conf.default
這是從源代碼目錄中拷貝過(guò)來(lái)的默認(rèn)配置文件。在升級(jí)了squid安裝后,你也許發(fā)現(xiàn)有一份當(dāng)前默認(rèn)配置文件的拷貝是有用的??赡軙?huì)增加新的配置指令,一些存在的舊指令可能有所改變。
etc/mime.conf
mime.conf文件告訴squid對(duì)從FTP和Gopher服務(wù)器獲取的數(shù)據(jù)使用何種MIME類(lèi)型。該文件是一個(gè)關(guān)聯(lián)文件名擴(kuò)展到MIME類(lèi)型的表。正常而言,你不必編輯該文件。然而,你可能需要增加特殊文件類(lèi)型的接口,它們?cè)谀愕慕M織內(nèi)使用。
etc/mime.conf.default
這是從源代碼目錄里拷貝過(guò)來(lái)的默認(rèn)mime.conf文件。
share
share目錄通常包括squid的只讀數(shù)據(jù)文件。
share/mib.txt
這是squid的SNMP管理信息基礎(chǔ)(MIB)文件。squid自身不使用該文件,然而,你的SNMP客戶(hù)端軟件(例如snmpget和多路由走向圖(MRTG))需要該文件,用以理解來(lái)自squid的SNMP對(duì)象可用。
share/icons
share/icons目錄包含大量的小圖標(biāo)文件,squid用在FTP和Gopher目錄列舉里。正常而言,你不必?fù)?dān)心這些文件,但如果需要,你可以改變它們。
share/errors
share/errors目錄包含了squid顯示給用戶(hù)看的錯(cuò)誤消息模板。這些文件在你安裝squid時(shí),從源代碼目錄拷貝而來(lái)。如果需要你可以編輯它們。然而,在每次運(yùn)行make install時(shí),安裝過(guò)程總會(huì)覆蓋它們。所以假如你想定制錯(cuò)誤消息,建議你把它們放在不同的目錄。
var
var目錄包含了不是很重要的和經(jīng)常變化的文件。這些文件你不必正常的備份它們。
var/logs
var/logs目錄是squid不同日志文件的默認(rèn)位置。當(dāng)你第一次安裝squid時(shí),它是空的。一旦squid開(kāi)始運(yùn)行,你能在這里看到名字為access.log,cache.log和store.log這樣的文件。
2.3.6 squid.conf 語(yǔ)法
Squid的配置文件相對(duì)規(guī)范。它與其他許多unix程序相似。每行以配置指令開(kāi)始,后面跟著數(shù)字值或關(guān)鍵字。在讀取配置文件時(shí),squid忽略空行和注釋掉的行(以#開(kāi)始)。如下是一些配置行示例:
cache_log /squid/var/cache.log
# define the localhost ACL
acl Localhost src 127.0.0.1/32
connect_timeout 2 minutes
log_fqdn on
某些指令取唯一值。在這些情形下,重復(fù)賦予該指令不同的值,將覆蓋前面的值。例如,下面是一個(gè)連接超時(shí)值。第一行無(wú)效,因?yàn)榈诙懈采w了它:
connect_timeout 2 minutes
connect_timeout 1 hour
另外,某些指令取列表值。在這些情形下,每一個(gè)新增的值都有效。"擴(kuò)展方式"指令以這種方法工作:
extension_methods UNGET
extension_methods UNPUT
extension_methods UNPOST
對(duì)這些基于列表的指令,你通常能在同一行中賦予多個(gè)值:
extension_methods UNGET UNPUT UNPOST
許多指令有通用類(lèi)型。例如,連接超時(shí)值是一個(gè)時(shí)間規(guī)范,在數(shù)字后面跟著時(shí)間單元。例如:
connect_timeout 3 hours
client_lifetime 4 days
negative_ttl 27 minutes
類(lèi)似的,大量的指令指向文件大小或者內(nèi)存額度。例如,你可以這樣編寫(xiě)大小規(guī)范:十進(jìn)制數(shù)字后面跟bytes,KB,MB或GB.例如:
minimum_object_size 12 bytes
request_header_max_size 10 KB
maximum_object_size 187 MB
另一種值得提起的類(lèi)型是觸發(fā)器,它的值是on或者off。許多指令使用該類(lèi)型。例如:
server_persistent_connections on
strip_query_terms off
prefer_direct on
通常,配置文件指令能以任何順序出現(xiàn)。然而,如果某個(gè)指令指向的值被其他指令所定義,那么順序就很重要。訪問(wèn)控制列表是個(gè)好的例子。acl被用在http_access規(guī)則之前必須被定義:
acl Foo src 1.2.3.4
http_access deny Foo
squid.conf文件里的許多東西是大小寫(xiě)敏感的,例如指令名。你不能將http_port寫(xiě)成HTTP_port。
默認(rèn)的squid.conf文件包含了對(duì)每個(gè)指令的大量注釋?zhuān)约爸噶畹哪J(rèn)值。例如:
# TAG: persistent_request_timeout
# How long to wait for the next HTTP request on a persistent
# connection after the previous request completes.
#
#Default:
# persistent_request_timeout 1 minute
每次安裝squid后,當(dāng)前默認(rèn)配置文件存放在$prefix/etc目錄下的squid.conf.default。既然指令每次都有所改變,你能參考該文檔,以獲取最近的更新。
2.3.7 squid 用戶(hù)
你可能知道,unix進(jìn)程和文件擁有文件和組屬主的屬性。你必須選擇某個(gè)用戶(hù)和組給squid。該用戶(hù)和組的組合,必須對(duì)大部分squid相關(guān)的文件和目錄有讀和寫(xiě)的權(quán)限。
我高度推薦創(chuàng)建名為"squid"的用戶(hù)和組。這避免了某人利用squid來(lái)讀取系統(tǒng)中的其他文件。假如不止一個(gè)人擁有對(duì)squid的管理權(quán)限,你可以將他們加到squid組里。
不幸的是,運(yùn)行squid并非總是如此簡(jiǎn)單。在某些情況下,你必須以root來(lái)啟動(dòng)squid,這依賴(lài)于你的配置。例如,僅僅root能綁定TCP套接字到特權(quán)端口上,如80。假如你必須以root來(lái)啟動(dòng)squid,你必須設(shè)置cache_effective_user指令。它告訴squid,在執(zhí)行完需要特別權(quán)限的任務(wù)后,變成哪個(gè)用戶(hù)。例如:
cache_effective_user squid
你提供的該名字必須是有效用戶(hù)(在/etc/passwd文件里)。請(qǐng)注意僅僅當(dāng)你以root來(lái)啟動(dòng)squid時(shí),你才需要用到該指令。僅僅root有能力來(lái)隨意改變用戶(hù)身份。假如你以joe來(lái)啟動(dòng)squid,它不能改變到squid用戶(hù)。
你可能?chē)L試不設(shè)置cache_effective_user,直接以root來(lái)運(yùn)行squid。假如你試過(guò),你會(huì)發(fā)現(xiàn)squid拒絕運(yùn)行。這違背了安全規(guī)則。假如外部***者有能力危及或利用squid,他能獲取對(duì)系統(tǒng)的全部訪問(wèn)權(quán)。盡管我們努力使squid安全和少bug,但還是穩(wěn)重點(diǎn)好。
假如你沒(méi)有設(shè)置cache_effective_user,以root來(lái)啟動(dòng)squid,squid使用nobody作為默認(rèn)值。不管你選擇什么用戶(hù)ID,請(qǐng)確認(rèn)它有對(duì)下面目錄的讀訪問(wèn)權(quán):$prefix/etc,$prefix/libexec,$prefix/share.該用戶(hù)ID也必須有對(duì)日志文件和緩存目錄的寫(xiě)訪問(wèn)權(quán)。
squid也有一個(gè)cache_effective_group指令,但你也許不必設(shè)置它。默認(rèn)的,squid使用cache_effective_user的默認(rèn)組(從/etc/passwd文件讀取)。
# /usr/sbin/useradd -s /sbin/nologin squid -M
默認(rèn)用戶(hù)為nobody
# grep cache_effective_user /usr/local/squid/etc/squid.conf
# TAG: cache_effective_user
# cache_effective_user nobody
修改用戶(hù)及組
cache_effective_user squid
cache_effective_group squid
2.3.8 squid 日志路徑
你必須確認(rèn)日志文件所存放的磁盤(pán)位置空間足夠。在squid寫(xiě)日志時(shí)如果接受到錯(cuò)誤,它會(huì)退出和重啟。該行為的主要理由應(yīng)引起你的注意。squid想確認(rèn)你不會(huì)丟失任何重要的日志信息,特別是你的系統(tǒng)被濫用或者被***時(shí)。
squid有三個(gè)主要的日志文件:cache.log,access.log,store.log.
cache.log:
包含狀態(tài)性的和調(diào)試性的消息。當(dāng)你剛開(kāi)始運(yùn)行squid時(shí),你應(yīng)密切的關(guān)注該文件。假如squid拒絕運(yùn)行,理由也許會(huì)出現(xiàn)在cache.log文件的結(jié)尾處。在正常條件下,該文件不會(huì)變得很大。也請(qǐng)注意,假如你以-s選項(xiàng)來(lái)運(yùn)行squid,重要的cache.log消息也可被送到你的syslog進(jìn)程。通過(guò)使用cache_log指令,你可以改變?cè)撊罩疚募穆窂剑?/span>
access.log:
access.log文件包含了對(duì)squid發(fā)起的每個(gè)客戶(hù)請(qǐng)求的單一行。一般為HTTP訪問(wèn)日志,每行平均約150個(gè)字節(jié)。也就是說(shuō),在接受一百萬(wàn)條客戶(hù)請(qǐng)求后,它的體積約是150M。請(qǐng)使用cache_access_log指令來(lái)改變?cè)撊罩疚募穆窂剑?/span>
cache_access_log /squid/logs/access.log
store.log:
store.log文件對(duì)大多數(shù)cache管理員來(lái)說(shuō)并非很有用。它包含了進(jìn)入和離開(kāi)緩存的每個(gè)目標(biāo)的記錄。平均記錄大小典型的是175-200字節(jié)。然而,squid不在store.log里對(duì)cache點(diǎn)擊創(chuàng)建接口,所以它比access.log包含少得多的記錄。請(qǐng)使用cache_store_log指令來(lái)改變它的位置
cache_store_log /squid/logs/store.log
access_log /usr/local/squid/var/logs/access.log squid
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log /usr/local/squid/var/logs/store.log
2.3.9 squid緩存路徑
cache_dir: 指定磁盤(pán)的緩存路徑
cache_dir ufs /usr/local/squid/var/cache 100 16 256
100 指定目錄大小MB
16 一級(jí)目錄的數(shù)量
256 二級(jí)子目錄的數(shù)量
2.3.10 squid 端口
http_port指令告訴squid在哪個(gè)端口偵聽(tīng)HTTP請(qǐng)求。默認(rèn)端口是3128:
http_port 3128
如果squid 作為反向代理,應(yīng)該將此值設(shè)置為80
你能使用附加的http_port行,來(lái)指示squid偵聽(tīng)在多個(gè)端口上。假如你必須支持客戶(hù)組(它們被配置得不一致),這點(diǎn)就經(jīng)常有用。例如,來(lái)自某個(gè)部門(mén)的瀏覽器發(fā)送請(qǐng)求到3128,然而另一個(gè)部門(mén)使用80端口。簡(jiǎn)單的將兩個(gè)端口號(hào)列舉出來(lái):
http_port 3128
http_port 8080
你也能使用http_port指令來(lái)使squid偵聽(tīng)在指定的接口地址上。當(dāng)squid作為防火墻運(yùn)行時(shí),它有兩個(gè)網(wǎng)絡(luò)接口:一個(gè)內(nèi)部的和一個(gè)外部的。你可能不想接受來(lái)自外部的http請(qǐng)求。為了使squid僅僅偵聽(tīng)在內(nèi)部接口上,簡(jiǎn)單的將IP地址放在端口號(hào)前面:
http_port 192.168.1.1:3128
例如:如果本機(jī)運(yùn)行http和squid 則指定ip地址即可:192.168.1.1:80
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。