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