標題:用Squid實現(xiàn)反向緩存代理 作者:陸培慶 寫于:2004-8-11 最后更新時間: 2003-09-21 4:04 PM 版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時請務(wù)必以超鏈接形式標明文章原始出處和作者信息及本聲明 前言: 這份文檔主要說明用Squid實現(xiàn)反向緩存代理!而不是Squid最常用的代理服務(wù)器。當然原理差不多,無非反過來想而已^_^!基本的思想來源于對于新浪,網(wǎng)易這些大網(wǎng)站的一次探索,發(fā)覺他們前面都是用一堆Squid檔著,然后后面才用Web Server,難怪可以抵擋那么高的流量,呵呵。詳情請參閱我的另一篇文章: 中國頂級門戶網(wǎng)站架構(gòu)分析。 1. Squid工作原理: Squid
啟動之后,會在 RAM 建立一個 Hash Table,記錄硬盤中 object
配置的情形,也會在內(nèi)存中存放最常用的資料(后面會介紹);同時Squid 又會在 RAM 中建立一個 Digest Table(摘要表)
,其功能是和其他有合作關(guān)系的 Squid (Sibling)互相交換 Digest
Table,萬一用戶端想要的資料自己沒有時,可以很快的知道哪一部 Squid Server 有資料(Squid 也可以透過 ICP 向其他
Squid 查詢,但速度較慢)。但是 Digest Table 本身不小,如果 Server 的內(nèi)存不夠,對外帶寬不夠,反而比 ICP
查詢更慢。 2. 編譯安裝Squid: ./configure
--prefix=/usr/local/squid[-ip] --enable-async-io=160 --enable-icmp
--enable-kill-parent-hack --enable-cache-digests
--enable-default-err-language=Simplify_Chinese --enable-poll &&
make && make install 3. Squid的結(jié)構(gòu)介紹: 安裝好的目錄在/usr/local/squid-10 (這里假設(shè)我的主ip最后一段是10) 4. Squid的配置介紹: 這里我不會詳細一一介紹squid.conf中的每一項設(shè)置,只是一些重點。 squid.conf是對我來說也是唯一需要配置的一個配置文件。選項非常多,當然,默認的squid.conf文件中對于每一個選項都有比較詳細的說明,但是我還是想把我理解的以及必須要進行配置的選項羅列出來,以免過段時間自己都忘了^_^ 以下的配置我是要向sina,sohu,163學習的web server的架構(gòu),試著自己去搭建一個這樣的環(huán)境來看看效果到底如何。因此這里的squid不是用來做代理的,而是反向作為網(wǎng)站高速緩存。其實原理差不多,只是方向反一反而已,相信都能理解這點的。 使 用的測試服務(wù)器為Dell 2650 雙CPU至強2.4G 內(nèi)存DDR 2G。OS為Freebsd 5.2.1(這里需要說明的是,從實際使用情況來看,squid跑在freebsd上的效果是最快最好的。這是由os的文件系統(tǒng)所決定的,千萬不能 用,solaris,感覺solaris的文件系統(tǒng)實在太慢,雖然非常穩(wěn)定,而且跑多線程的效果是最好的。linux嘛~~~沒有進行測試,不過感覺在 freebsd之下,solaris之上。) Squid.conf的幾個重要參數(shù)的配置說明: http_port 61.155.143.54:80 #Squid Server偵聽的端口。假設(shè)我的主頁的dns server 指到61.155.143.54上的,因此我必須讓squid來偵聽這個IP的這個端口。 cache_mem 32 MB #要額外提供多少內(nèi)存給squid使用,這里的額外是指squid會將最常用的一些緩存放到這塊內(nèi)存中。這個指令也是我看了官方文檔后才理解的。因為一開 始從實際使用情況來看,我這邊設(shè)32M的話,用top命令來查看一般會達到100M左右。這點讓我讓我很想不通,呵呵。然后就去看官方文檔,發(fā)覺 squid是這樣來計算使用多少內(nèi)存的:squid本身的進程大概10M-20M,然后下面我設(shè)的cache目錄的大小是500M的話,那他放在內(nèi)存里的 hash索引大概需要20M左右,然后再加上這里設(shè)置的cache_mem的值。官方文檔建議你的實際內(nèi)存大小應該是這個squid所需要總內(nèi)存的2倍以 上。自己量力而為吧。cache_mem當然是越大越好了。 cache_dir ufs /usr/local/squid-10/var/cache 500 16 256 #設(shè)置squid存放cache目錄的位置以及大小。第一個數(shù)字500是指目錄的總大小為500M(默認為100M),第二個數(shù)字16是指第一級目錄為 16個,第三個數(shù)字256是指第二級目錄為256個我個人覺得如果網(wǎng)站訪問量大,并且內(nèi)容很多的話,可以考慮將默認的100M改大一點,否則會報錯。我就 經(jīng)歷過,錯誤我忘了記錄了(該死?。┐笾戮褪钦f超過Max的極限了,當時查了半天才找到罪魁禍首是這條指令,慚愧~~~。 cache_access_log none cache_store_log none #我是將這些log記錄都關(guān)了, 有需要的可以將它們打開。 acl managerIP src 10.10.10.10 http_access allow manager managerIP ipcanbrows localhost #加上2個允許就可以了。高深的配置我覺得我也不需要,用戶可以訪問就達到目的了:) httpd_accel_host virtual #由于我后面的apache server是基于ip來做虛擬主機的,因此這里需要設(shè)置成virtual。 httpd_accel_port 80 #http加速的端口,因為習慣等原因,還是將后面的apache server監(jiān)聽80端口。 httpd_accel_uses_host_header on #如果選了virtual的話,這里必須設(shè)置成on。 這里最多只列出了5%左右的選項,但是我配置的時候就只是用到了這些,因此,如果做網(wǎng)站加速的話,基本設(shè)置就是這些。當然需要更強勁的功能的話就需要好好讀讀squid的配置文件的文檔了。 5. 最后的步驟: 1. 改變var目錄的權(quán)限:chown -R nobody var 2. 創(chuàng)建緩存目錄:sbin/squid -z 3. 啟動squid:bin/RunAccel & (這邊我使用squid附帶的啟動腳本來啟動squid,有個好處就是,如果squid的進程死了的話,這個腳本會自動啟動squid,對于運行在線上的服務(wù)器來說,這點太重要了)。 6. 一些使用體會: 1. squid使用時間長了,速度會變慢,我的建議是每2小時kill掉squid 進程,RunAccel腳本會自動再啟動的它。 2. 寫一腳本,放進crontab中,每天凌晨4點左右把cache目錄清空。 #!/bin/sh 7. 參考資料: Squid官方網(wǎng)站: http://www. |
|