




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、(第 3 章)譯者序:本人在工作中著數(shù)臺 Squid 服務(wù)器,多次參閱 Duane We人)的這本書,原書名是Squid: The Definitive Guide,由 OReillys(他也是 Squid 的創(chuàng)始。我在業(yè)余時間把它翻譯成中文,希望對中文 Squid 用戶有所幫助。對普通的上網(wǎng)用戶,Squid 可充當(dāng)代理服務(wù)器;而對 Sina,NetEase 這樣的大型站點(diǎn),Squid 又充當(dāng) WEB。這兩個角色它都扮演得異常優(yōu)秀。窗外繁星點(diǎn)點(diǎn),開源的世界亦如這星空般美麗,而 Squid 是其中耀眼的一顆星。對本譯版有任何問題,請跟我的是:目 錄第 3 章 編譯和安裝2安裝之前2解開源代碼包2
2、調(diào)整內(nèi)核2文件描述符3Mbuf Clusters4臨時端口范圍53.4 Configure. 5configure選項6運(yùn)行configure123.5 編譯123.6 安裝14打補(bǔ)丁16重運(yùn)行configure171第 3 章 編譯和安裝3.1 安裝之前假如你使用 unix 有一段時間,并且已編譯過許多其他包,那么只需快速的掃描本章。編譯安裝 squid 的過程與安裝其他相似。為了編譯 squid,你需要一個 ANSI C 編譯器。不要被 ANSI 字眼嚇倒。假如你已經(jīng)有一個編譯器,它順從 ANSI 指令,那么也一樣。GNU C 編譯器(gcc)是很好的選擇,它被廣泛使用。大部分操作系統(tǒng)在其
3、標(biāo)準(zhǔn)安裝中附帶了 C 編譯器,不過 Solaris 和 HP-UX 除外。假如你使用這樣的操作系統(tǒng),那可能沒有安裝編譯器。理論上你應(yīng)該在即將運(yùn)行 squid 的機(jī)器上編譯 squid。安裝過程偵察你的操作系統(tǒng)以發(fā)現(xiàn)特定的參數(shù),例如可用文件描述符的數(shù)量。然而,假如你的系統(tǒng)沒有 C 編譯器存在,你也許會在其他機(jī)器上編譯squid,然后把二進(jìn)制代碼 copy 回來。如果操作系統(tǒng)不同,那么 squid可能會遇到問題。假如操作系統(tǒng)有不同的內(nèi)核配置,squid 會變得。除了 C 編譯器,你還需要 perl 和 awk。awk 是所有 unix 系統(tǒng)的標(biāo)準(zhǔn)程序,所以你不必?fù)?dān)心它。perl 也是相當(dāng)普及的,但
4、它也許沒有默認(rèn)安裝在你的系統(tǒng)上。你需要 gzip 程序來解壓源代碼發(fā)布文件。對 Solaris 用戶,請確認(rèn)/usr/ccs/bin 包含在你的 PATH 環(huán)境變量里,即使你使用 gcc 編譯器。為了編譯 squid,make 和 ar 程序需要在這個目錄找到。3.2 解開源代碼包在完源代碼后,你需要在某個目錄解開它。具體哪個目錄無關(guān)緊要。你能解開 squid在你的家目錄或任何其他地方,大概需要 20M 的tar 命令來展開源代碼目錄:% cd /tmp磁盤空間。我個人喜歡用/tmp。使用% tar xzvf /some/where/squid-2.5.STABLE4-src.tar.gz一些
5、 tar 程序不支持 z 選項,該選項自動解壓 gzip 文件。如果這樣,你需要運(yùn)行如下命令:% gzip -dc /some/where/squid-2.5.STABLE4-src.tar.gz | tar xvf -一旦源代碼被展開,下一步通常是配置源代碼樹。然而,假如這是你第一次編譯 squid,你應(yīng)確認(rèn)特定的內(nèi)核資源限制足夠高。怎樣發(fā)現(xiàn),請繼續(xù)。3.3 調(diào)整內(nèi)核Squid 在高負(fù)載下,需要大量的內(nèi)核資源。特別的,你需要給你的系統(tǒng)配置比正常情況更高的文件描述符和緩存。文件描述符的限制通常很惱人。你最好在開始編譯 squid 之前來增加這些限制的大小。因為這點(diǎn),你可能為了避免重建內(nèi)核的麻煩
6、,而傾向于使用預(yù)編譯的二進(jìn)制版本。不幸的是,不管如何你必須重建一個新內(nèi)核。squid 和內(nèi)核通過數(shù)據(jù)結(jié)構(gòu)來交換信息,數(shù)據(jù)結(jié)構(gòu)的大小過設(shè)置的文件描述符的限制。squid 在運(yùn)行時檢查這些設(shè)置,并且使用最安全2的(最小的)值。這樣,即使預(yù)編譯的二進(jìn)制版本有比你的內(nèi)核更高的文件描述符,但還是以你系統(tǒng)內(nèi)核的實際數(shù)值為主。為了改編一些參數(shù),你需要重建新內(nèi)核。這個過程在不同的操作系統(tǒng)之間不同。假如需要,請參閱 Unix 系統(tǒng)管理員手冊(Prentice Hall用 Linux,可能不必重建內(nèi)核。)或者你的操作系統(tǒng)文檔。假如你正使3.3.1 文件描述符文件描述符是一個簡單的整數(shù),用以標(biāo)明每一個被進(jìn)程所打開的
7、文件和 socket。第一個打開的文件是 0,第二個是 1,依此類推。Unix 操作系統(tǒng)通常給每個進(jìn)程能打開的文件數(shù)量強(qiáng)加一個限制。更甚的是,unix 通常有一個系統(tǒng)級的限制。因為 squid 的工作方式,文件描述符的限制可能會極大的影響性能。當(dāng) squid 用完所有的文件描述符后,它不能接收用戶新的連接。也就是說,用完文件描述符導(dǎo)致服務(wù)。直到一部分當(dāng)前請求完成,相應(yīng)的文件和 socket 被關(guān)閉,squid 不能接收新請求。當(dāng) squid 發(fā)現(xiàn)文件描述符短缺時,它會發(fā)布警告。在運(yùn)行./configure 之前,檢查你的系統(tǒng)的文件描述符限制是否合適,能給你避免一些麻煩。大多數(shù)情況下,1024
8、個文件描述符足夠了。非常忙的 cache 可能需要 4096 或。在配置文件描述符限制時,我設(shè)置系統(tǒng)級限制的數(shù)量為每個進(jìn)程限制的 2 倍。通常在你的Unix s中能找到系統(tǒng)的文件描述符限制。所有的 C s及其類似的s有內(nèi)建的 limit 命令。更新的 Bourne s及其類似的 s有一條叫做 ulimit令。為了發(fā)現(xiàn)你的系統(tǒng)的文件描述符限制,試運(yùn)行如下命令:csh% limit descriptors unlimited csh% limit descriptorsdescriptors或者4096sh$ ulimit -n unlimited sh$ ulimit -n4096在 Freeb
9、sd 上,你能使用 sysctl 命令:% sysctl -a | grep maxfiles kern.maxfiles: 8192kern.maxfilesproc: 4096如果你不能確認(rèn)文件描述符限制, squid 的./configure行./configure 時,請見 3.4 章節(jié),觀察末尾這樣的輸出:能替你做到。當(dāng)你運(yùn)checkingum number of file descriptors we can open. 4096假如其他的 limit,ulimit,或者./configure這個值少于 1024,你不得不在編譯 squid 之前,花費(fèi)時間來增加這個限制值的大小。否
10、則,squid 在高負(fù)載時執(zhí)行性能將很低。增加文件描述符限制的方法因系統(tǒng)不同而不同。下面的章節(jié)提供一些方法幫助你開始。 Freebsd,NetBSD,OpenBSD編輯你的內(nèi)核配置文件,增加如下一行:optionsMAXFILES=8192在 OpenBSD 上,使用 option 代替 options。然后,configure,編譯,和安裝新內(nèi)核。最后重啟系統(tǒng)以使內(nèi)核生效。3 Linux在 Linux 上配置文件描述符有點(diǎn)復(fù)雜。在編譯 squid 之前,你必須編輯系統(tǒng) include 文件中的一個,然后執(zhí)行一些 s_FD_SETSIZE 的值:#define _ _FD_SETSIZE命令。
11、請首先編輯/usr/include/bits/types.h 文件,改變_8192下一步,使用這個命令增加內(nèi)核文件描述符的限制:# echo 8192 /proc/sys/fs/file-max最后,增加進(jìn)程文件描述符的限制,在你即將編譯 squid 的同一個 s sh# ulimit -Hn 8192里執(zhí)行:該命令必須以 root 運(yùn)行,僅僅運(yùn)行在 bash s。不必重啟機(jī)器。使用這個技術(shù),你必須在每一次系統(tǒng)啟動后執(zhí)行上述 echo 和 ulimit 命令,或者至少在squid 啟動之前。假如你使用某個 rc.d來啟動 squid,那是一個放置這些命令的好地方。 Solaris增加該行到你的
12、/etc/system 文件:set rlim_fd_max = 4096然后,重啟機(jī)器以使改動生效。3.3.2Mbuf ClustersBSD 基礎(chǔ)的網(wǎng)絡(luò)代碼使用一個叫做 mbuf(參閱 W.R.Stevens 的 TCP/IP 描述卷 2)的數(shù)據(jù)結(jié)構(gòu)。Mbuf 典型的是小塊內(nèi)存(例如 128 字節(jié))。較大的網(wǎng)絡(luò)包的數(shù)據(jù)在 mbuf clusters里。內(nèi)核可能給系統(tǒng)可用的 mbuf clusters 的總數(shù)量強(qiáng)加一個最高限制。你能使用 nets來發(fā)現(xiàn)這個限制:命令% nets-m196/6368/32768 mbufs in use (current/peak/max): 146 mbuf
13、s allocated to data50 mbufs allocated to packet headers 103/6182/8192 mbuf clusters in use (current/peak/max) 13956 Kbytes allocated to network (56% of mb_map in use) 0 requests for memory denied0 requests for memory delayed0 calls to protocol drain routines在這個例子里,有 8192 個 mbuf clusters 可用,但是不會同時用到
14、6182 個。當(dāng)系統(tǒng)用盡 mbuf clusters 時,I/O 機(jī)制例如 read()和 write()返回“無緩存空間可用”的錯誤信息。NetBSD 和 OpenBSD 使用 nets-m 不會顯示 mbuf 的輸出。代替的,它們在 syslog 里:WARNING: mclpool limit reached 。為了增加 mbuf clusters 的數(shù)量,你必須在內(nèi)核配置文件里增加一個選項:optionsNMBCLUSTERS=1638443.3.3 臨時端口范圍臨時端口是 TCP/IP 棧分配給出去連接的本地端口。換句話說,當(dāng) squid 發(fā)起一條連接到另一臺服務(wù)器,內(nèi)核給本地 so
15、cket 分配一個端。這些本地端有特定的范圍限制。例如,在 FreeBSD 上,默認(rèn)的臨時端口范圍是 1024-5000。臨時端的短缺對非常忙的服務(wù)器(例如每秒數(shù)百個連接)來說,會較大的影響性能。這是因為一些 TCP 連接在它們被關(guān)閉時進(jìn)入 TIME_WAIT狀態(tài)。當(dāng)連接進(jìn)入TIME_WATI 狀態(tài)時,臨時端不能被重用。你能使用 nets命令來顯示有多少個連接進(jìn)入這個狀態(tài):% nets-n | grep TIME_WAITProto Recv-Q Send-QLocal Address 2.195832.195972.196002.196012.196022.31282.31282.31282
16、.3128Foreign Address 0.8090.8030.8021.8015.807.256667.2579590.148890.2194(e)tcp4 tcp4 tcp4 tcp4 tcp4 tcp4 tcp4 tcp4tcp4000000000000000000TIME_WAIT TIME_WAIT TIME_WAIT TIME_WAIT TIME_WAIT TIME_WAIT TIME_WAIT TIME_WAITTIME_WAIT注意這個例子中既有客戶端連接又有服務(wù)器端的連接??蛻舳诉B接有 3128 作為臨時端,服務(wù)器端連接有 80 作為例子里,它們是 19000 秒。主機(jī)的端
17、。臨時端出現(xiàn)在本地地址欄里。在該如果你沒有看到數(shù)千個臨時端口在 TIME_WAIT 狀態(tài),那也許不必增加這個端口范圍。在 Freebsd 上,用如下命令增加臨時端口范圍:# sysctl -w net.inet.ip.portrange.last=30000在 OpenBSD 上,命令類似,但 sysctl 變量有不同的名字:# sysctl -w net.inet.ip.portlast=49151在 NetBSD 上,事情稍有不同。默認(rèn)的值是 49152-65535.為了增加這個范圍,需改變最低限制:# sysctl -w net.inet.ip.anonportmin=10000在 Li
18、nux 上,簡單的寫一對數(shù)字到下列指定文件:# echo 1024 40000 /proc/sys/net/ipv4/ip_local_port_range記將這些命令加到你的系統(tǒng)啟動中,以使機(jī)器每一次重啟后都生效。3.4 Configure象許多其他 Unix信息。./configure一樣,squid 在開始編譯之前使用./configure來了解操作系統(tǒng)由流行的 GNU autoconf 程序產(chǎn)生。當(dāng) script 運(yùn)行時,它用不同的方法來偵察系統(tǒng),以發(fā)現(xiàn)關(guān)于庫,函數(shù),類型,參數(shù),和有沒有功能被提供等。./configure 所做的第一件事情是去找一個 C 編譯器。假如 C 編譯器沒有找
19、到,或者編譯一個簡單的測試程序失敗,./configure./configure不能繼續(xù)。有大量的選項。最重要的是安裝 prefix。在運(yùn)行./configure 之前,你需要5決定 squid 被安裝在哪里。prefix 選項指定 squid 日志,二進(jìn)制文件,和配置文件的默認(rèn)位置。你可以在安裝之后改變這些文件的位置,但假如你現(xiàn)在決定,事情更容易。默認(rèn)的安裝位置是/usr/local/squid.squid 將文件放在 prefix 指定目錄下面的 7 個子目錄:% ls -l /usr/local/squid total 5drwxr-x-drwxr-x-drwxr-x-drwxr-x-d
20、rwxr-x-drwxr-x-drwxr-x-2 we2 wewewe2 we4 we4 wes s s s s sswheel wheel wheel wheel wheel wheelwheel512 Apr 28 20:42 bin512 Apr 28 20:42 etc512 Apr 28 20:42 libexec512 Apr 28 20:43 man512 Apr 28 20:42 sbin512 Apr 28 20:42 share512 Apr 28 20:43 varSquid 使用bin,etc,libexec,man,sbin,和share 目錄存放一些相對較小的文件(
21、或其他目錄),這些文件不經(jīng)常改變。但 var 目錄的文件別有洞天。這里你可以發(fā)現(xiàn) squid 的日志文件,它增長得非常大(數(shù)十或數(shù)百兆)。var 也是實際磁盤 cache 的默認(rèn)位置。你也許想將 var 目錄放在磁盤空間足夠的位置,這樣做較容易的方法是使用-localsedir 選項:% ./configure -localsedir=/bigdisk/var當(dāng)配置 squid 時,你不必對這些路徑名稱擔(dān)心太多。你以后可以在 squid.conf 文件里改變這些路徑名。3.4.1 configure 選項./configure有大量的不同選項,它們以-開始。當(dāng)你敲入./configure -h
22、elp 時,能看到選項的完整列表。一些選項對所有 configure面是你可能用得到的標(biāo)準(zhǔn)選項:是通用的,還有一些是 squid 專有的。下-perfix =PREFIX如前面描述的一樣,這里設(shè)置安裝目錄。安裝目錄是所有可執(zhí)行文件,日志,和配置文件的默認(rèn)目錄。在整本書中,$prefix 指你選擇的安裝目錄。-localsedir =DIR該選項允許你改變 var 目錄的安裝位置。默認(rèn)是$prefix/var,但也許你想改變它,以使squid 的磁盤緩存和日志文件被在別的地方。-sysconfdir =DIR該選項允許你改變 etc 目錄的位置。默認(rèn)的是$prefix/etc.假如你想使用/us
23、r 作為安裝位置,你也許該配置-sysconfdir 為/etc.以下是 squid 的專有./configure 選項:-enable-dlmalloc=LIB在一些系統(tǒng)上,內(nèi)建的內(nèi)存分配機(jī)制(malloc)在使用 squid 時表現(xiàn)不盡人意。使用-enable-dlmalloc 選項將 squid 源代碼包中的 dlmalloc 包編譯和安裝dlmalloc,你能使用=LIB 參數(shù)指定庫的路徑。請見關(guān)于 dlmalloc 的信息。進(jìn)來。假如你的系統(tǒng)中已6-enable-gnuregex在控制列表和其他配置指令里,squid 使用正則表達(dá)式作為匹配機(jī)制。GNU 的正則表達(dá)式庫包含在 squi
24、d 的源代碼包里;它可以在沒有內(nèi)建正則表達(dá)式的操作系統(tǒng)中使用。./configure偵察你系統(tǒng)中的正則表達(dá)式庫,假如必要,它可以激活使用 GNU 正則表達(dá)式。如果因為某些理由,你想強(qiáng)制使用 GNU 正則表達(dá)式,你可以將這個選項加到./configure 命令后。-enable-carpCache 數(shù)組路由協(xié)議(CARP)用來轉(zhuǎn)發(fā)丟失的 cache 到父 cache 的數(shù)組或 cluster。在10.9 章有關(guān)于 CARP 的細(xì)節(jié)。-enable-async-io=N_THREADS異步 I/O 是 squid 技術(shù)之一,用以性能。aufs 模塊使用大量的線程來執(zhí)行磁盤I/O 操作。該代碼僅僅工
25、作在 linux 和solaris 系統(tǒng)中。=N_THREADS 參數(shù)改變 squid 使用的線程數(shù)量。aufs 和異步 I/O 在 8.4 章中被。請注意-enable-async-io 是打開其他三個./configure 選項的快捷方式,它等同于:-wiufs-threads=N_THREADS-with-pthreads-enable-storeio=ufs,aufs-with-pthreads該選項導(dǎo)致編譯過程到你系統(tǒng)中的 P 線程庫。aufs模塊是 squid 中唯一需要使用線程的部分。通常來說,如果你使用-enable-saync-io 選項,那么不必再單獨(dú)指定該選項,因為它被自
26、動激活了。-enable-storeio=LISTSquid 支持大量的不同模塊。通過使用該選項,你告訴 squid 編譯時使用哪個模塊。在 squid-2.5 中,支持 ufs,aufs,diskd,和null 模塊。通過查詢 src/fs 中的目錄,你能得到一個模塊列表。LIST 是一個以逗號分隔的模塊列表,例如:% ./configure -enable-storeio=afus,diskd,ufsufs 模塊是默認(rèn)的,看起來問題最少。不幸的是,它性能有限。其他模塊可能在某些操作系統(tǒng)中不必編譯。關(guān)于 squid模塊的完整描述,請見第 8 章。-wiufs-threads=N_THREAD
27、S指定 aufs機(jī)制使用的線程數(shù)量(見 8.4 章)。squid 默認(rèn)根據(jù)緩存目錄的數(shù)量,自動計算需要使用多少線程。-enable-heap-replacement該選項不再使用,但被保留用于向后兼容性。你該使用-enable-removal-policies 來代替。-enable-removal-policies=LIST排除策略是 squid 需要騰出空間給新的 cache 目標(biāo)時,用以排除舊目標(biāo)的機(jī)制。squid-2.57支持 3 個排除策略:最少近期使用(LRU),貪婪對偶大小(GDS),最少經(jīng)常使用(LFU)。然而,因為一些理由,./configure 選項使指定的替代策略和需要執(zhí)
28、行它們的基本數(shù)據(jù)結(jié)構(gòu)之間的差別模糊化。LRU 是默認(rèn)的,它以雙鏈表數(shù)據(jù)結(jié)構(gòu)執(zhí)行。GDS 和 LFU 使用堆棧的數(shù)據(jù)結(jié)構(gòu)。為了使用 GDS 或 LFU 策略,你指定:% ./configure -enable-removal-policies=heap然后你在squid 的配置文件里選擇使用 GDS 或LFU。假如你想重新使用 LRU,那么指定:% ./configure -enable-removal-policies=heap,lru的關(guān)于替換策略的細(xì)節(jié)請見 7.5 章。-enable-icmp如在 10.5 章中描述的一樣,squid 能利用 ICMP 消息來確定回環(huán)時間尺寸,非常象程序。
29、你能使用該選項來激活這些功能。-enable-delay-pools延時池是 squid 用于傳輸形狀或帶寬限制的技術(shù)。該池由大量的客戶端 IP 地址組成。當(dāng)來自這些客戶端的請求處于 cache 丟失狀態(tài),他們的響應(yīng)可能細(xì)節(jié)請見附錄 C。工延遲。關(guān)于延時池的-enable-useragent-log該選項激活來自客戶請求的 HTTP 用戶頭的日志。細(xì)節(jié)請見 13.5 章。-enable-referer-log該選項激活來自客戶請求的 HTTP referer 日志。細(xì)節(jié)請見 13.4 章。-disable-wWeb cache 協(xié)調(diào)協(xié)議(W)是 CISCO 的專有協(xié)議,用于或分發(fā) HTTP 請
30、求到一個或多個 caches。W默認(rèn)被激活,假如你愿意,可以使用該選項來該功能。-enable-snmp簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)是監(jiān)視網(wǎng)絡(luò)設(shè)備和服務(wù)器的流行方法。該選項導(dǎo)致編譯過程去編譯所有的 SNMP 相關(guān)的代碼,包括一個裁切版本的 CMU SNMP 庫。-enable-cachemgr -hostname=hostnamecachemgr 是一個 CGI 程序,你能使用它來管理查詢 squid。默認(rèn) cachemgr 的 hostname值是空的,但你能使用該選項來指定一個默認(rèn)值。例如:% ./configure -enable-cachemgr-hostname=-enable-ar
31、p-aclsquid 在一些操作系統(tǒng)中支持 ARP,或者以太地址控制列表。該代碼使用非標(biāo)準(zhǔn)的函。假如你在 linux 或 solaris 上使用數(shù)接口,來執(zhí)行 ARP控制列表,所以它默認(rèn)被squid,你可能用的上這個功能。-enable-htcp8HTCP 是超文本緩存協(xié)議-類似于 ICP 的緩存協(xié)議。細(xì)節(jié)請見 10.8 章。-enable-ssl使用該選項賦予 squid 終止 SSL/TLS 連接的能力。注意這僅僅工作在 web中用以加速請求。細(xì)節(jié)請見 15.2.2 章節(jié)。-with-openssl=DIR假如必要,你使用該選項來告訴 squid 到哪里找到 OpenSSL 庫或頭文件。假
32、如它們不在默認(rèn)位置,在該選項后指定它們的父路徑。例如:% ./configure -enable-ssl -with-ssl=/opt/foo/openssl在這個例子中,你的編譯器將在/opt/foo/openssl/include 目錄中找頭文件, 在/opt/foo/openssl/lib 中找件。-enable-cache-digestsCache 消化是 ICP 的另一個替代,但有著截然不同的特性。請見 10.7 章。-enable-err-languages=lang1 lang2 .squid 支持定制錯誤消息,錯誤消息可以用多種語言。該選項指定到安裝目錄($prefix/sha
33、re/errors)的語言。假如你不使用該選項,所有可用語言被安裝。想知道何種語言可用,請見源代碼包里 errors 目錄下的目錄列表。如下顯示如何激活多種語言:% ./configure -enable-err-languages=Dh German French .-enable-default-err-language=lang該選項設(shè)置 error_directory 指令的默認(rèn)值。例如,假如你想使用荷蘭語,你能這樣指定:% ./configure -enable-default-err-language=Dh你也能在 squid.conf 里指定 error_directory 指令
34、,在附錄 A 中有描述。假如你忽略該選項,英語是默認(rèn)錯誤語言。-with-coss-membuf-size=N循環(huán)目錄系統(tǒng)(coss)是 squid 的試驗性機(jī)制。該選項設(shè)置 coss 緩存目錄的內(nèi)存緩沖大小。注意為了使用 coss,你必須在-enable-storeio 選項里指定類型。該參數(shù)以字節(jié)形式賦值,默認(rèn)是 1048576 字節(jié)或 1M。你能指定 2M 緩沖如下:% ./configure -with-coss-membuf-size=2097152-enable-pollunix 提供兩個相似的函數(shù)用以在 I/O 事件里掃描開放文件描述符: select() 和poll()./co
35、nfigure通常能非常好的計算出何時使用 poll()來代替 select().假如你想強(qiáng)制使用 poll(),那么指定該選項。-desable-poll類似的,如果不使用 poll(),那么指定該選項。-disable-http-violationssquid 默認(rèn)可以被配置成違背 HTTP 協(xié)議規(guī)范。你能使用該選項來刪除違背 HTTP 協(xié)議9的代碼。-enable-ipf-transparent在第 9 章中,我將描述如何配置 squid 來緩存。一些操作系統(tǒng)使用 IP Filter 包來協(xié)助緩存。在這些環(huán)境下你應(yīng)該使用該./configure 選項。如果你使用了該選項,但是編譯器提示
36、src/cnt_side.c 文件出錯,那是因為 IP Filter 包沒有或沒有正確的安裝在你的系統(tǒng)中。-enable-pf-transparent你可能需要指定該選項,使用 PF濾器在操作系統(tǒng)中HTTP。PF 是 OpenBSD的標(biāo)準(zhǔn)濾器,也可能被發(fā)布到其他系統(tǒng)中。假如你使用該選項,但是編譯器提示src/cnt_side.c 文件出錯,那是因為 PF 沒有實際安裝到你的系統(tǒng)中。-enable-linux-netfilterNetfilter 是 linux 2.4 系列內(nèi)核的濾器名字。假如你想在 linux2.4 或以后的版本中使用 HTTP功能,那么激活該選項。-disable-iden
37、t-lookupsident 是一個簡單的協(xié)議,允許服務(wù)器利用客戶端的特殊 TCP 連接來發(fā)現(xiàn)用戶名。假如你使用該選項,編譯器將把執(zhí)行這些查詢的代碼排除出去。即使你在編譯時保留了這些代碼,除非你在 squid.conf 文件里指定,squid 不會執(zhí)行 ident 查詢。-disable-ernal-dnssquid 源代碼包含兩個不同的 DNS 解決方案,叫做“的”和“外部的”。查詢是默認(rèn)的,但某些人可能要使用外部技術(shù)。該選項功能,轉(zhuǎn)向使用舊的方式。查詢使用 squid 自己的 DNS 協(xié)議執(zhí)行工具。也就是說,squid 產(chǎn)生未完成的 DNS查詢并且將它們發(fā)送到一個器。假如超時,它重新發(fā)送請
38、求,你能指定任意數(shù)量的器。該工具的有利處之一是,squid 獲得準(zhǔn)確無誤的 DNS 響應(yīng)的 TTLs。外部查詢利用 C 庫的 gethostbyname()和 gethostbyaddr()函數(shù)。squid 使用一個外部進(jìn)程池來制造并行查詢。使用外部 DNS的主要弊端是你需要的輔助進(jìn)程,增加 squid的負(fù)載。另一個麻煩是 C 庫函數(shù)不在響應(yīng)里傳輸 TTLs,這樣 squid 使用提供的一個常量值。tive_dns_ttl 指令-enable-truncatetruncate()系統(tǒng)調(diào)用是 unlink()的替代品。unlink()完全刪除 cache 文件,truncate()將文件大小設(shè)為
39、零。這樣做了分配給該文件的磁盤空間,但留下適當(dāng)?shù)哪夸浗涌?。該選項存在的理由是,某些人相信(或希望)truncate()比 unlink()性能表現(xiàn)更好。然而,壓力測試顯示兩者有很少的或根本沒有區(qū)別。-disable-hostname-checks默認(rèn)的,squid 要求 URL 主機(jī)名在一定程度上遵守古老的 RFC 1034 規(guī)范:必須遵循下列 ARPANET 主機(jī)名規(guī)則。它們必須以字母開始,以字母或數(shù)字結(jié)尾,僅僅包含字母,數(shù)字和下劃線。這里字母意味著 ASCII 字符,從 A 到 Z。既然國際選項來移除限制。日益流行,你可能希望使用該10-enable-underscores該選項控制 sq
40、uid 針對主機(jī)名里下劃線的行為。通用的標(biāo)準(zhǔn)是主機(jī)名里不包含下劃線字符,盡管有些人不贊成這點(diǎn)。squid 默認(rèn)會對 URL 主機(jī)名里帶下劃線的請求產(chǎn)生一條錯誤消息。你能使用該選項,讓 squid 信任它們,把它們當(dāng)作合法的。然而,你的 DNS器也許強(qiáng)迫使用非下劃線請求,并且對帶下劃線的主機(jī)名失敗。-enable-auth=LIST該選項控制在squid 的二進(jìn)制文件里支持哪種驗證機(jī)制。你能選擇下列機(jī)制的任意組合:basic,digeslm.假如你忽略該選項,squid 僅僅支持 basic 驗證。假如你使用不帶參數(shù)的-enable-auth 選項,編譯進(jìn)程將增加對所有驗證機(jī)制的支持。你可以使用
41、以逗號分隔的驗證機(jī)制列表:% ./configure -enable-auth=digeslm我在第六章和第十二章里會談得。-enable-auth-helpers=LIST這個舊選項現(xiàn)在已舍棄了, 但為了保持向后兼容性仍保留著。你可以使用-enabasic-auth-helperes=LIST 來代替。-enabasic-auth-helpers=LIST使用該選項,你能將 helpers/basic_auth 目錄的一個或多個 HTTP Basic 驗證輔助程序編譯進(jìn)來。請見 12.2 章找到它們的名字和描述。-enable-ntlm-auth-helpers=LIST使用該選項,你能將
42、helpers/ntlm_auth 目錄的一個或多個 HTTP NTLM 驗證輔助程序編譯進(jìn)來。請見 12.4 章找到它們的名字和描述。-enable-digest-auth-modules=LIST使用該選項,你能將 helpers/digest_auth 目錄的一個或多個 HTTP Digest 驗證輔助程序編譯進(jìn)來。請見 12.3 章找到它們的名字和描述。-enable-external-acl-helpers=LIST使用該選項,你能編譯一個或多個擴(kuò)展 ACL 輔助程序,這些在 12.5 章中% ./configure -enable-external-acl-helpers=ip_u
43、ser,ldap_group。例如:-disable-unlinkdunlinkd 是另一個 squid 的外部輔助進(jìn)程。它的基本工作是對 cache 文件執(zhí)行 unlink()或truncate()系統(tǒng)調(diào)用。通過在外部進(jìn)程里執(zhí)行文件刪除工作,能給 squid 帶來明顯的性能。使用該選項來外部 unlink 進(jìn)程功能。-enable-stacktrace某些系統(tǒng)支持在程序時,自動產(chǎn)生數(shù)據(jù)追蹤。當(dāng)你激活該功能后,如果 squid,數(shù)據(jù)追蹤信息被寫到 cache.log 文件。這些信息對開發(fā)和程序 bug 調(diào)試有用。11-enable-x-accelerator-vary該高級功能可能在 squi
44、d 被配置成時使用。它建議 squid 在響應(yīng)請求時,從原始服務(wù)器中尋找 X-Accelerator-Vary 頭。請見 15.5 章。3.4.2 運(yùn)行 configure現(xiàn)在準(zhǔn)備運(yùn)行./configure。進(jìn)入源代碼的頂級目錄敲入./configure,后面跟上前面提到過的任意選項,例如:% cd squid-2.5.STABLE4% ./configure -enable-icmp -enable-htcp./configure 的工作就是偵察你的操作系統(tǒng),以發(fā)現(xiàn)什么東西可用,什么不可用。它首先做的事情之一就是確認(rèn)你的 C 編譯器可用。假如./configure 檢測到你的 C 編譯器有問
45、題,腳本會退出,返回如下錯誤:configure: error: installation or configuration problem: C compiler cannot create executables.很可能你從不會看到這個消息。假如看到了,那意味著你的系統(tǒng)中沒有 C 編譯器存在,或者編譯器沒有正確安裝。請見 config.log 文件找到解決問題的建議。假如你的系統(tǒng)中有多個 C 編譯器,你可以在運(yùn)行./configure 之前設(shè)置CC 環(huán)境變量,來告訴./configure 使用哪個:% setenv CC /usr/local/bin/gcc% ./configure .在
46、./configure 檢查完該編譯器后,它查找頭文件,件和函數(shù)的長列表。通常你不必?fù)?dān)心該部分。在某些實際情況中,./configure 會終止以引起你的注意,某些事情可能有問題,例如沒有足夠的文件描述符。假如你指定不完整的或不合理令行選項,它也會終止。假錯誤發(fā)生,請檢查 config.log 輸出。./configure 的最終任務(wù)是創(chuàng)造 Makefiles 和其他文件,這些文件基于 squid 從你系統(tǒng)中了解到的知識。到此為止,你準(zhǔn)備做編譯工作。3.5 編譯一旦./configure 完成了它的工作,你簡單的敲入 make 開始編譯源代碼:%make正常來說,該過程很順利,你可以見到大量的
47、滾動行。你也許見到一些編譯器警告。大多數(shù)情況下,可以安全的忽略這些。假如這些警告非常多,并且一些看起來非常嚴(yán)重,請將它們給開發(fā)者,在第 16.5 章中有描述。假如編譯過程沒有錯誤,你可以轉(zhuǎn)移到下一節(jié),描述如何安裝你剛才編譯的程序。為了驗證編譯是否成功,你可以再次運(yùn)行 make。你將看到如下輸出:% makeMaking all in lib.Making all in scripts.Making all in src.Making all in fs. Making all in repl. squid is up to t is up to date.12unlinkd is up to
48、date. cachemgr.cgi is up to date. Making all in icons.Making all in errors.Making all in auth_modules.因為許多理由,編譯步驟也許會失敗,包括:源代碼 bugs通常 squid 源代碼是完整的調(diào)試過的。然而,你也許會遇到某些 bugs 或問題從而你編譯。這種問題在新的開發(fā)版本中更容易出現(xiàn),請將它們給開發(fā)者。編譯器安裝問題不正確安裝的 C 編譯器不能夠編譯 squid 或其他包。通常編譯器隨著操作系統(tǒng)預(yù)安裝,所以你不必?fù)?dān)心它。然而,假如你在操作系統(tǒng)安裝完后,試圖升級編譯器,那么可能會犯錯誤。絕對已
49、經(jīng)安裝好的編譯器從一臺機(jī)器拷貝到另一臺,除非你絕對清楚你在做什么。我覺得在每臺機(jī)上獨(dú)立的安裝編譯器總是最好的。請確認(rèn)你的編譯器的頭文件總是與件同步。頭文件通常在/usr/include 目錄,而件在/usr/lib 目錄。Linux 的流行 RPM 系統(tǒng)允許它去升級其中之一,但并非另一個。假如庫文件基于不同的頭文件,squid 不能編譯。假如你想在開源BSD 變種之一中升級編譯器,請確認(rèn)在/usr/src 目錄中運(yùn)行make world,這好過從/usr/src/lib 或/usr/src/include 中運(yùn)行。如下是一些通用的編譯器問題和錯誤消息:Solaris: make1: * lib
50、miscutil.a Error 255這意味著./configure 不能發(fā)現(xiàn) ar 程序。請確認(rèn)/usr/ccs/bin 位于你的 PATH 環(huán)境變量里。假 如 你 沒 有 安 裝(Sun的 編 譯 器 , 那 么 需 要).GNU的 工 具 。Linux: storage size of rl isnt known這是因為頭文件和件不匹配所致,象前面描述的一樣。請確認(rèn)同時升級兩者。Digita Digita包含如下行:ix: Dont know how to make EXTRA_libmiscutil_a_SOUR. Stop.ix的make 程序不能兼容automake 包產(chǎn)生的Ma
51、kefile文件。例如,lib/Makefile.innoinst_LIBRARIES = LIBDLMALLOC libmiscutil.a libntlmauLIBREGEX在替換后,當(dāng) lib/Makefile 被創(chuàng)建時,它看起來如下:noinst_LIBRARIES = libmiscutil.a 13libntlmau象上面顯示的一樣,最后一行包括一個不可見的 TAB 字符,它了 make。通過安裝和使用 GNU make,或者手工編輯 lib/Makefile 如下,來解決這個問題:noinst_LIBRARIES = libmiscutil.a libntlmau假如你在編譯 s
52、quid 時遇到問題,請先檢查 FAQ。你也許該在 Squid 的 web 站點(diǎn)上搜索(使用主頁里的搜索欄)。最后,假如你仍有問題,請發(fā)郵件到 squid-userssquid-cache.列表。3.6 安裝在編譯完后,你需要把程序安裝到指定的目錄。可能需要超級用戶權(quán)限來把它們放置到安裝目錄。所以,請先切換到 root:%su password:#make install假如你通過使用-enable-icmp 選項,激活了squid 的ICMP 衡量功能,那么必須安裝er程序。er 程序必須以超級用戶權(quán)限安裝,因為僅僅允許 root 來發(fā)送和接受 ICMP 消息。下列命令以相應(yīng)的#make i
53、nstall-來安裝erer 程序:在安裝完后,你將在 squid 的安裝目錄里(默認(rèn)是/usr/local/squid)見到下列目錄和文件:sbinsbin 目錄的程序正常只能被 root 啟動sbin/squidSquid 的主程序binbin 目錄包含對所有用戶可用的程序bin/RunCacheRunCache 是一個 s,你能用它來啟動 squid。假如 squid 死掉,該自動重啟它,除非它檢測到經(jīng)常的重啟。RunCache 是一個時間遺留的產(chǎn)物,那時 Squid 還不是服務(wù)進(jìn)程。在最近的版本里,RunCache 很少用到,因為 Squid 自動重啟它自身,當(dāng)你不使用-N 選項時。b
54、in/RunAccelRunAccel 與 RunCache 幾乎一致,唯一的不同是它增加了一個命令行參數(shù),告訴 squid在哪里偵聽 HTTP 請求。14bin/squidcntsquidcnt 是個簡單的 HTTP 客戶端程序,你能用它來測試 squid。它也有一些特殊功能,用以對運(yùn)行的 squid 進(jìn)程發(fā)起管理請求。libexeclibexec 目錄傳統(tǒng)的包含了輔助程序。有一些命令你不能正常的啟動。然而,這些程序通常被其他程序啟動。libexec/unlinkdunlinkd 是一個輔助程序,它從 cache 目錄里刪除文件。如你后面看到的一樣,文件刪除是個性能瓶頸。通過在外部進(jìn)程里執(zhí)行
55、刪除操作,Squid了一些執(zhí)行性能。libexec/cachemgr.cgicachemgr.cgi 是 Squid 管理功能的 CGI 接口。為了使用它,你需要拷貝該程序到你的WEB 服務(wù)器的 cgi-bin 目錄。在 14.2 章中有描述。libexec/diskd(optional)假如你指定了-enable-storeio=diskd,你才能看到它。libexec/er(optional)假如你指定了-enable-icmp,你才能看到它。etcetc 目錄包含 squid 的配置文件。etc/squid.conf這是 squid 的主要配置文件。初始的該文件包含了大量的注釋,用以解釋
56、每一個選項做什么。在你理解了這些配置指令后,建議你刪除這些注釋,讓配置文件更小和更容易閱讀。注意假如該文件存在,安裝過程不會覆蓋該文件。etc/squid.conf.default這是從源代碼目錄中拷貝過來的默認(rèn)配置文件。在升級了 squid 安裝后,你也許發(fā)現(xiàn)有一份當(dāng)前默認(rèn)配置文件的拷貝是有用的??赡軙黾有碌呐渲弥噶睿恍┐嬖诘呐f指令可能有所改變。etc/mime.confmime.conf 文件告訴 squid 對從 FTP 和Gopher 服務(wù)器獲取的數(shù)據(jù)使用何種MIME 類型。該文件是一個關(guān)聯(lián)文件名擴(kuò)展到 MIME 類型的表。正常而言,你不必編輯該文件。然而,你可能需要增加特殊文件類
57、型的接口,它們在你的組織內(nèi)使用。etc/mime.conf.default這是從源代碼目錄里拷貝過來的默認(rèn) mime.conf 文件。share15share 目錄通常包括 squid 的只讀數(shù)據(jù)文件。share/mib.txt這是 squid 的 SNMP 管理信息基礎(chǔ)(MIB)文件。squid 自身不使用該文件,然而,你的 SNMP 客戶端(例如 snmpget 和多路由圖(MRTG))需要該文件,用以理解來自squid 的 SNMP 對象可用。share/iconsshare/icons 目錄包含大量的小圖標(biāo)文件,squid 用在 FTP 和 Gopher 目錄列舉里。正常而言,你不必?fù)?dān)
58、心這些文件,但如果需要,你可以改變它們。share/errorsshare/errors 目錄包含了 squid 顯示給用戶看的錯誤消息模板。這些文件在你安裝 squid時,從源代碼目錄拷貝而來。如果需要你可以編輯它們。然而,在每次運(yùn)行 make install 時,安裝過程總會覆蓋它們。所以假如你想定制錯誤消息,建議你把它們放在不同的目錄。varvar 目錄包含了不是很重要的和經(jīng)常變化的文件。這些文件你不必正常的備份它們。var/logsvar/logs 目錄是 squid 不同日志文件的默認(rèn)位置。當(dāng)你第一次安裝 squid 時,它是空的。一旦 squid 開始運(yùn)行,你能在這里看到名字為 a
59、cs.log,cache.log 和 store.log 這樣的文件。var/cache假如你不在 squid.conf 文件里指定,這是默認(rèn)的緩存目錄(cache_dir)。第七章有關(guān)于緩存目錄的所有細(xì)節(jié)。3.7 打補(bǔ)丁在你運(yùn)行 squid 一段時間后,你可能發(fā)現(xiàn)需要打源代碼補(bǔ)丁,用以修正 bug 或者增加試驗性的功能。在 squid-cache.站點(diǎn)上,對重要的 bug 修正會發(fā)布補(bǔ)丁。假如你不想等到下一個發(fā)布版本,你能補(bǔ)丁,并且打到你的源代碼中。然后你需要重新編譯 squid。為了打補(bǔ)丁-或者有時候叫差別文件-你需要一個叫做patch的程序。你的操作系統(tǒng)必須有該程序。如果沒有,你可以從 GNU 工具集里().注意假如你在使用系統(tǒng)自動升級了補(bǔ)丁。CVS(見 2.4 節(jié)),你不必?fù)?dān)心補(bǔ)丁文件。當(dāng)你升級源代碼樹時,CVS為了打補(bǔ)丁,你必須把補(bǔ)丁文件存放在系統(tǒng)中某處。然后進(jìn)入到 squid 的源代碼目錄,運(yùn)行如下命令:% cd squid-2.5.STABLE4% patch /tmp/patch_file默認(rèn)的,在 patch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年銀行從業(yè)資產(chǎn)評估試題及答案
- 信息流在物流中的重要性與試題及答案
- 明晰思路:2024年證券從業(yè)資格考試試題及答案
- 動脈瘤栓塞術(shù)后的護(hù)理
- 如何制作網(wǎng)球教案
- 年度客戶滿意度提升計劃
- 提升決策能力的訓(xùn)練計劃
- 工作計劃中應(yīng)關(guān)注的關(guān)鍵績效指標(biāo)
- 班級鼓勵機(jī)制的設(shè)計與實施計劃
- 磨練意志與隨遇而安的能力計劃
- 2024年思政考試準(zhǔn)備試題及答案
- 2024年婁底市公安局警務(wù)輔助人員招聘考試真題
- 總經(jīng)理聘任合同模板7篇
- PLC應(yīng)用技術(shù)課件 任務(wù)6. S7-1200 PLC控制電動機(jī)正反轉(zhuǎn)
- 福建省龍巖市2024屆高考一模地理試題(含答案)(含答案)
- 天津市和平區(qū)2023-2024學(xué)年八年級下學(xué)期期末物理試題【含答案、解析】
- 《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》解讀與培訓(xùn) (五)
- 浙江首考2025年1月普通高等學(xué)校招生全國統(tǒng)考化學(xué)試題及答案
- 《中醫(yī)養(yǎng)生學(xué)》課件-八段錦
- 【2025年衛(wèi)生健康宣傳日】世界防治結(jié)核病日
- DBJ33T 1104-2022 建設(shè)工程監(jiān)理工作標(biāo)準(zhǔn)
評論
0/150
提交評論