本篇教程是順應你們的要求而寫。教程內大部分都是奶罩在爲VeryCD等大型網站構建CDN時所累積的經驗。在一些概念方面可能會有一些錯漏,但願 你們指正。php
本教程面對的對象是我的站長,因此各方面會力求傻瓜化,讓你們都能看懂。固然,前提是須要你要有一顆好學的心,還有堅韌的毅力。 另一方面,本篇文章基本不會涉及到Windows的內容,整套系統將會是架構在CentOS Linux 5上。別問我爲何不是Windows,由於Windows只能拿一個字形容:爛。不喜歡Linux,或者認爲Linux學習起來有困難的朋友,能夠到此 打住。 可能有人要問,爲何是Linux,而不是FreeBSD?由於FreeBSD無論從系統的優化配置,仍是文件系統的性能,都不合適初學者。css
先前說過,本篇文章針對的是沒有多少技術基礎的我的站長,因此文章內會有Linux的安裝、基本操做等一些東西教給你,讓你學得簡單,時間花得有價值。mysql
再羅嗦一下,在接下來的時間內你將要面對一個黑漆漆的,全是英文的屏幕,請作好心理準備。linux
注意:本篇教程將*不會*涉及到如下內容: 1.動態內容(好比BBS) 2.大文件(好比軟件下載站的軟件)web
第 1 章 CDN和智能DNSsql
1.什麼是CDN 簡單來講,CDN就是能讓你的網站訪問起來更加快的東西。apache
例如網通用戶訪問了你在網通的CDN服務器上面某個文件,CDN系統就會判斷這個文件是否被請求 過,若是被請求過,在沒有失效的狀況下,就會從系統的緩存裏面讀取這個文件並返回給用戶。若是這個文件沒有被請求過,那麼CDN會自動從你的主服務器上面 獲取這個文件,而後緩存到CDN系統內,再給用戶返回。ubuntu
看到這裏,聰明的朋友就會問:若是網通的CDN服務器,訪問我在電信的主服務器速度很慢,那麼是否是用戶第一次請求這個文件的時候會很慢?嘿嘿,恭喜你, 的確是這樣。而且,在文件沒有徹底緩存到CDN上面的時候,全部訪問這個文件的用戶都會出現錯誤,好比網頁打開不完整,文件下載到一半等。但只要你的網站 訪問量足夠大,這個影響對用戶來講是微不足道的。vim
而後還有朋友會問,爲何商業的CDN不存在這個問題?由於,商業的CDN有本身租用的線路,本身走路由。這就是商業CDN賣得如此之貴的緣由。固然,如 何走這個路由,搭建這麼一個大型的CDN系統,不在本文的討論範圍之內。windows
2.什麼是智能DNS,什麼是DNSPod
智能DNS的原理很簡單:在用戶解析一個域名的時候,判斷一下用戶的IP,而後跟DNS服務器內部的IP表匹配一下,看看用戶是電信仍是網通用戶,而後給 用戶返回對應的IP地址。 DNSPod是奶罩同窗旗下的網站,提供免費的智能DNS服務。你只須要把你域名的DNS從原來的註冊商改成DNSPod,立刻就能夠享用這個服務了。
注意了:DNSPod只提供域名的智能解析服務,不提供域名也不提供服務器,千萬不要覺得把你的域名轉到DNSPod就能成爲雙線了。
第 2 章 前期準備
要繼續後面的步驟,你必需要準備如下東西:
域名一個 服務器兩臺,電信網通各一臺,通常的P4便可,內存2G以上
空白DVD R+光盤一張(或者CD-R 6張)
DVD刻錄機一個(或者CD RW刻錄機一個)。
而後,你還須要去下載CentOS的ISO鏡像 隨便在下面的鏡像地址挑一個,暫時沒有國內的,建議掛一個迅雷慢慢下
http://ftp.ncnu.edu.tw/Linux/CentOS/5.0/isos/i386/
http://ftp.cse.yzu.edu.tw/pub/CentOS/5.0/isos/i386/
http://ftp.cs.pu.edu.tw/Linux/CentOS/5.0/isos/i386/
http://ftp.tcc.edu.tw/Linux/CentOS/5.0/isos/i386/
http://mirror.mirr4u.com/centos/5.0/isos/i386/
http://mirror.tini4u.net/centos/5.0/isos/i386/
http://mirror.averse.net/centos/5.0/isos/i386/
打開上面的網址後,你能夠發現相似下面的文件名 CentOS-5.0-i386-bin-1of6.iso … CentOS-5.0-i386-bin-6of6.iso 這些是CD鏡像,一共有6個,下載刻盤比較浪費資源,因此我建議下載下面這個DVD鏡像 CentOS-5.0-i386-bin-DVD.iso 廢話很少說,下載回來後刻盤便可。
以後,爲資源作一個安排,因此下面將會作一個假設:
假設域名爲naizhao.com
假設兩臺服務器,電信的服務器爲A,網通的服務器爲B
假設A服務器爲內容服務器,B服務器爲CDN服務器,B服務器全部須要的內容均從A服務器取得
假設A服務器的IP是1.1.1.1,B服務器的IP是2.2.2.2
OK,到這裏後咱們所須要的東西基本準備好了。
ISO可能尚未下載好,不急,慢慢掛着,咱們先來把域名的DNS設置好。
1.基本安裝 把光盤塞進光驅,設置BIOS從光驅啓動(別告訴我你不會),而後會看到啓動界面,上面有一些提示,能夠輸入一些命令進行高級安裝或者進入系統修復模式。不用管,直接按回車。
稍等一下,會出現一個界面要求你作光盤的完整性檢查。通常來講如今刻出來的盤不會有壞的,除非是下載回來的ISO文件有問題。因此這裏咱們跳過。
跳過的方法是:按鍵盤的TAB鍵進行控件的選擇,被選擇上的控件會高亮,咱們選擇Skip(建議你們隨時打開翻譯工具或者網站對不懂的英文進行翻譯),而後按空格鍵進行確認。
而後再等一下,咱們就能夠看到安裝的圖形界面了。
按下一步(Next),選擇安裝語言。由於Linux對中文支持並很差,黑漆漆的字符界面若是顯示中文的話會有亂碼(雖然遠程鏈接上去的時候能夠看 到,但服務器一旦出現故障,須要在機房操做的時候,你就會發現默認英文是多麼重要),因此咱們就選擇默認的英文(English),而後按下一步。
接着就是選擇鍵盤樣式。相信你們的鍵盤都是英文而不是日文的(玩過筆記本的都見過水貨IBM吧?上面一撇一劃的就是日文鍵盤),那麼就留着默認U.S. English吧。什麼?你恰好拿水貨IBM來裝?那還得用英文,不然打出來的字亂七八糟別怪我。
下一步,輪到選擇安裝方式了。由於咱們是全新安裝,因此就選擇第一個Install CentOS,下一步。
接着是詢問要如何分區了。堅定不要用一個分區安裝全部文件,或者讓系統自動劃分。咱們堅持全部分區都本身來劃分。這樣能夠有效避免在單個分區出現問 題的狀況下會形成全部資料沒法恢復的狀況。(難理解?其實就跟Windows的C盤出問題同樣。C盤出現嚴重問題沒法讀取,但可使用工具盤啓動系統,訪 問D、E等盤,把資料恢復出來)
咱們在下拉菜單裏面選擇Create custom layout(建立自定義佈局),下一步。
而後會看到當前機器上面硬盤的狀況,Linux全部的設備都在目錄/dev下面,普通的IDE硬盤的標識是hd(scsi、sata是sd),第一 個硬盤是a,第二個是b,如此類推。因此這裏若是你用的是普通IDE硬盤,而後接在第一根IDE線主盤的位置上,那麼硬盤的標識就是/dev/hda。如 果是sata硬盤,那麼通常就是/dev/sda。若是光驅是IDE的,接在另一根IDE線主設備口上,那麼通常是/dev/hdc。 另外你們要對Linux的分區有認識。你們會以爲奇怪,Windows有C盤,D盤,爲何Linux沒有?Linux的分區又是用什麼一種方式存在的 呢? 其實在Linux裏面,每一個分區都會做爲一個目錄對待。全部目錄都從/(根)開始,樹形發展。具體狀況你們能夠去參考相關資料,這裏很少作闡述。這麼作對 於咱們有一個最大的好處:某個目錄分區空間用完了,咱們只須要加裝一個大硬盤,而後把這個硬盤整個分紅一個區,在系統裏面加載,把這個目錄裏面的文件所有 拷貝進來,做爲這個目錄,這樣就不怕空間不夠了。 接着說說分區的文件系統。用Windows的朋友必定都知道fat32,ntfs吧?Linux下面最經常使用的文件系統是ext3和reiserfs,另外 有比較舊的ext2,如今已經不多人用了,還有SWAP,交換分區。幾種文件系統的優劣就不作評比了,文內一概使用ext3,由於CentOS對ext3 支持比reiserfs要好點。
Linux的基本系統包括了下面幾個目錄 / 根分區,若是你想把整個硬盤分一個區,那麼就分這個區 /bin,/sbin 都是一些用到的命令 /boot 放置啓動文件 /usr 包括一些命令、庫、幫助等一些不常改變的文件 /usr/local 同上,通常新的程序都安裝在這裏,就跟Windows的Program files差很少 /var 都是一些常常變化的文件,好比log /home 看名字就知道,用戶住的地方 /etc 裏面都是設置文件,跟註冊表有點相似做用 /lib 共享庫,so文件,做用相似windows的dll文件。打開裏面會看到一些數字,實際上是版本號 /root 老大住的地方,後面會提到
下面是幾個比較特殊的目錄 SWAP 看清楚了,前面沒有/的。Swap是交換分區,也就是Windows裏面的虛擬內存,但不同的是基本不會用到。分區的時候只須要分一個,不須要設置掛載 點,文件系統選擇好就行。 /dev 存放設備系統 ,屬於虛擬文件系統 /proc 存放有進程信息,一樣是虛擬文件系統。能夠經過此文件系統實時修改內核或者進程,也就是交互。好比能夠實時查看內存的使用、CPU信息 後面兩個看不懂不要緊,咱們先來分區。
上面的圖片能夠看到,硬盤原來存在分區,咱們把/dev/hda選上,而後點上面菜單的Delete整個刪除。 接着咱們點一下菜單的New,開始分區,先分一個/,文件系統選擇ext3,分區大小是1G,也就是1024M。 Mount Point就是掛載點,輸入/ File System Type文件系統,下拉中選擇ext3 Size分區大小,按照MB計算的,輸入1024 完成後按OK 跟着分SWAP,點New,直接在File System Type選擇swap,Size輸入2048,按OK
剩餘的分區你們按照下面來分 / 1024 swap 2048 /usr 5120 /usr/local 5120 /var 5120 /tmp 2048 /usr/local/squid 1024 /var/spool/squid 全部剩餘的空間
全部剩餘的空間要怎麼選?很簡單,選上Fill to maximum allowable size便可。
分區分完之後,看起來像下面的樣子 OK,全部分區都完了之後,咱們繼續下一步。 接着會出現一個安裝GRUB的界面。GRUB是用來啓動系統的,包括雙系統的啓動都要用上,裝好後在啓動的時候你會看到有一個菜單給你選擇。這裏不用更改 什麼,直接下一步就好。 若是你的網卡能順利被系統認出來的話,這步就應該是讓你配置網卡參數了。 點擊Edit,出現網卡配置頁面。先把Use dynamic IP configuration(DHCP)去掉,DHCP是自動從網關分配IP,由於咱們的IP是固定的,因此不須要。 而後IPv6咱們也不用,Enable IPv6 support也去掉。 Activate on boot表示系統啓動後自動啓動網卡,要選上。 由於這臺服務器是網通使用,IP是2.2.2.2,因此在Address裏面就輸入2.2.2.2,Prefix(Netmask)是子網掩碼,能夠輸入 255.255.255.0或者24。24是一種名爲CIDR的尋址方式,具體能夠去Google一下,這裏不深刻解釋。 配置好的網卡以下圖
保存後,咱們還須要設置主機名,這裏就設置爲cnc.naizhao.com吧。
而後還有一些雜項(Miscellaneous Settings),Gateway是網關,Primary DNS是主DNS,Secondary DNS是次要DNS,根據具體需求設置上去。
跟着設置時區。點一下地圖的右上角,而後在上海的位置點一下,左下角的下拉菜單會變爲Asia/Shanghai,下一步。
跟着就是設置root的密碼。Linux跟windows不同,windows能夠有不少個管理員,Linux只能有一個root,通常用戶要行使管理員的身份,必需要用su這個命令臨時改變身份爲管理員。
輸入兩次密碼後確認,下一步。
接着就是選擇安裝類型了。把Desktop什麼的所有去掉,在Server前面勾上 。下面會有一行提示,問你要在何時進行所安裝的包的詳細配置(You can further customize the software selection now, or after install via the software management application),選上Customize now。下一步。
接着是安裝包選擇界面。左邊會有Desktop Environments/Applications/Development等。按照下面的列表進行選擇:
* Desktop Environments - 所有去掉 * Applications - Editors 選上 - 其他所有去掉 * Development - Development Libraries 選上 - Development Tools 選上 - 其他所有去掉 * Servers - 所有去掉 * Base System - Dialup Networking Support 去掉 * 其餘均爲默認
下一步,開始安裝。等待安裝完成後重啓便可。
2.初次啓動 初次啓動的時候,會有一個設置代理,就跟安裝時要求檢測CD完整性的界面差很少,用上下鍵選擇Firewall configuration,按一下TAB鍵,空格進入。
而後在Security Level選擇Disabled,也就是關閉防火牆,TAB鍵選擇OK,空格退出。以後系統會繼續啓動,直到出現登陸界面。
CentOS release 5 (Final) Kernel 2.6.18-8.el5 on an i686 cnc login:
3.遠程鏈接 Linux的遠程鏈接方式是ssh。ssh是一種通過加密的鏈接方式,全部數據交換都會被加密,就算服務器被arp攻擊也不怕密碼會被監聽。
Windows下的ssh客戶端,咱們通常使用putty。由於putty太好用了,因此有臺灣的網友進行了修改而且本地化,發佈出來的程序名字叫作pietty。
Pietty的官方網站是:http://www.csie.ntu.edu.tw/~piaip/pietty/ 下載地址是:http://www.csie.ntu.edu.tw/~piaip/pietty/stable/pietty0327.exe
下載回來運行,而後輸入服務器的IP,回車就能夠鏈接了。若是是第一次鏈接服務器,程序還會提示你是否接受並保存服務器的證書,選擇是便可。而後按照提示輸入用戶名root和密碼。
4.Linux的基本命令 首先要注意:Linux是一個大小寫區分的系統。無論你作什麼事情都要注意大小寫。cpu和Cpu是不同的。
說幾個比較經常使用的
ls 列出文件和目錄。默認是當前目錄,若是要列出/bin下面的文件,輸入ls /bin
cd 進入某個目錄。好比cd /bin能夠進入/bin目錄,cd ..進入上一級目錄,cd abc進入當前目錄下面的abc目錄,cd -回到上一次進入的目錄。
cp 拷貝文件或者目錄。cp a b拷貝a文件爲b文件
mkdir 創建目錄。好比mkdir naizhao。若是要創建/a/b/c/d/e這個目錄,但/a/b/c/d這幾個目錄都不存在,使用mkdir -p /a/b/c/d/e,那麼會把這幾個目錄一併建立。
rm 刪除文件或者目錄。rm a刪除a文件。要刪除一個目錄必需要用rm -rf a,表示刪除a目錄
mv 移動文件。不過大部分狀況下用來給文件更名。由於linux下面沒有專門更名的命令。mv a b把a文件更名爲b。mv a ../把a文件移動到上一級目錄
more 比較有用的命令。好比用了ls命令,但出來的文字太多,已經超過一個屏幕了,我要看開頭部分的內容要怎麼看?可使用ls|more,這樣就能夠隨意的翻 屏了。|是管道,負責把|前面命令的結果交給|後面的命令。管道可使用多個,好比ls -lh|grep naizhao|more,也就是說把ls -lh的結果交給grep處理,而後grep把處理出來的結果交給more。
grep 也是比較經常使用的命令。負責把所須要的內容抽取出來。好比我ls -lh /lib,內容太多了,並不都是我所須要的,我只須要包含dns這幾個字的內容,那麼我就使用ls -lh /lib|grep dns。若是我須要不包括dns這三個字的內容呢?使用ls -lh /lib|grep -v dns
cat 不是貓。cat命令負責把一個文件裏面的內容完整輸出來。內容多的時候配合more使用。好比cat /proc/cpuinfo,會把cpuinfo裏面的內容顯示出來。
wc 噢,不是廁所,別誤會。這是用來算數的。好比我要算一個文件裏面有多少行,那麼使用cat /proc/cpuinfo|wc -l,輸出的數字就是cpuinfo文件的行數,-l參數是按照行(line)來計算。這個命令最經常使用的時候是什麼呢?看網絡鏈接,好比要看看當前系統是 不是被別人SYN了,那麼輸入netstat -an|grep SYN|wc -l
netstat 查看網絡狀態,通常用來看系統當前有幾個鏈接。好比看80端口有多少個鏈接,輸入netstat -an|grep :80|wc -l
這些命令建議你們多點玩,不要怕。玩壞了系統大不了重裝,反正上面如今也沒資料。
5.VIM的基本使用 VI是全部Unix系統必帶的工具。幹什麼用的呢?Windows的記事本,知道吧?這個東西比記事本還要高級幾百倍,整個Linux基本就是在VI裏面 寫的。VIM則是VI的改進版本,某些系統裏面只帶了VI,沒有VIM。但這兩個東西命令上是沒有分別的,都是命令行裏面敲入vi就能夠啓動。
咱們要學習如下幾個方面:打開文件、編輯文件、保存文件
咱們以/etc/hosts文件爲例,在裏面添加一條1.1.1.1 www.naizhao.com的記錄。
A.打開文件 打開文件很簡單,vi 文件名,好比vi /etc/hosts,而後會看到相似下面的內容
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 cnc.naizhao.com cnc localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6
B.編輯文件 編輯一共三個方面:插入(添加)、修改、刪除
vi裏面,能夠經過鍵盤的方向鍵移動光標。咱們移動到 ::1 localhost6.localdomain6 localhost6 這行,而後按下鍵盤的o(字母)鍵,會發現光標跑下面去了,自動新起一行。
而後咱們輸入1.1.1.1,按兩次鍵盤的tab鍵,再輸入www.naizhao.com,然內容看起來像下面這樣 1.1.1.1 www.naizhao.com 而後,咱們按兩次鍵盤左上角的esc鍵。在按第一次的時候,你會發現光標向前跳了一下,立刻再按第二次,若是你打開了音箱,你會聽到噹的一聲響。
好了,添加新一行就是那麼簡單。
而後,咱們再爲1.1.1.1添加一個記錄,tel.naizhao.com,怎麼作呢?
移動光標到www.naizhao.com的m上,按一下鍵盤的i(insert的意思)鍵,這樣編輯模式就會變爲插入。嗯,敲個空格看看。啊,怎麼把個人com給分開成co m了?我要的不是這個效果啊!
不急不急,按照前面的方法,按兩次esc鍵,退出編輯模式,而後按一次鍵盤的u(undo)鍵。哦,還好,東西都回來了。原來i是在當前文字的前面 插入啊。那再來一次,光標移動到m上面,按一下i,而後用鍵盤把光標向右移動一下,來到m的背後,敲一個空格,而後輸入tel.naizhao.com, 而後按兩次esc鍵。嗯,看起來有模有樣了。
喂,我怕文件被我破壞了,想要先保存一下,怎麼辦?
保存文件啊,也很簡單啊。先輸入一個冒號(:)。什麼?不知道怎麼輸?按住shift鍵,敲一下回車鍵左邊的分號;,這不,冒號出來了。而後冒號後 面跟着一個w(write),看起來就像這個樣子:w,回車。你會看到一行提示 「/etc/hosts」 5L, 248C written 表示文件保存完成。
而後,呃,還有修改。若是我發現某個字打錯了,好比com的o,我打成0了,我要怎麼改?
先把光標移動到0上面,而後按鍵盤的r(replace),而後按一下o,哈哈,改過來了,趕忙:w保存先。
嗯。。。若是我不須要tel.naizhao.com,我要怎麼刪除啊?
刪除的英文是什麼來着?delete吧?鼠標移動到tel的t上面,按一下鍵盤d,而後按一下右方向鍵,嘿嘿,t被刪掉了。可是,我要刪除整個 url,一個一個刪過去,是否麻煩了點?嗯,有點道理,跟我一塊兒數數吧。1,2,3,4,5….tl.naizhao.com一共有14個字符,那我就先 按一下鍵盤的d,而後用數字鍵輸入14(帶有特殊符號那行,不是小鍵盤)(呃,怎麼輸入後看不到的?),而後按一下右方向鍵,嗯,世界清淨了。真完美。
另外,還有一些比較方便的快捷鍵,好比輸入dd,刪除當前行,輸入gg,會回到文件的開頭位置,輸入G(也就是shift+g)會到文件的末尾, ctrl+d到下一頁,ctrl+b到上一頁,shift+a在文件末尾插入,shift+d刪除當前光標位置一直到行末的文字,這些都等你們慢慢琢磨。
C.保存文件 保存文件剛纔說了一個:w,若是我想直接保存退出,要怎樣呢?可使用:wq(write&quit),或者直接:x。
可是,文件剛纔被我改到一塌糊塗,我不想保存了,我要直接退出,怎麼退?
若是文件沒有被改變過,能夠直接輸入:q退出。但若是文件被改動過,但又沒有保存,:q會報錯,那麼能夠在q前面加上一個!,強行退出,就像這個樣子:!q
若是文件只讀,你要強行寫入,固然能夠在w的前面加上!了。
6.設置安裝更新 國外的東西在國內有個很麻煩的地方:鏡像都在國外。因此,要升級系統,必需要把鏡像改成國內的私人鏡像。因而乎,剛纔所學到的VIM知識又用上了。 CentOS的升級工具爲yum,鏡像配置文件在/etc/yum.repos.d/CentOS-Base.repo,那麼,咱們用vi打開吧。 vi /etc/yum.repos.d/CentOS-Base.repo 呃,裏面好多網址啊,難道要我一個一個都改過去?豈不是累死我? 不怕不怕,記事本都有查找替換呢,vi固然也少不了這個功能了。 yum默認是從mirrorlist=這行獲取鏡像列表的,既然咱們指定了鏡像地址,那麼就須要把這行註釋了。註釋的方法是在前面加上#,也就 是#mirrorlist=這樣。 趕忙開始操做,vi裏面查找替換的格式大概是這樣:%s/a/b/g,也就是查找a,替換成b,g則是全文件查找。把公式套用過來,就是這個樣子 :%s/mirrorlist=/#mirrorlist=/g 嗯嗯,輸入回車看看,都替換掉了吧?哈哈。 接着,指定url地址要把#baseurl=前面的#去掉,根據剛纔的例子,獲得 :%s/#baseurl=/baseurl=/g 又OK了一個,剩下最後一個了。 國內私人搭建的centos鏡像,比較有名的是be10.com,網址是http://mirror.be10.com/ 打開上面的網址,能夠看到孤零零的一個centos目錄,對比一下配置文件裏面的url http://mirror.be10.com/centos/ http://mirror.centos.org/centos/ 找不一樣遊戲開始了,看來看去,兩個url的差異就是be10.com和centos.org了,也就是說我只要把centos.org替換成 be10.com就能夠了。 :%s/centos.org/be10.com/g 大功告成,趕忙保存退出,而後輸入 yum update 更新吧。
更新的過程當中會有互動節目,有幾個地方會讓你輸入y來確認是否要安裝更新包,直接輸入y回車確認就好。
忙活了老半天,你們都累的夠嗆了,讓機器慢慢更新,咱們喝杯咖啡泡個功夫茶去。接下來的事情還多着呢。
第 5 章 安裝Squid的前期準備 從本章開始,你們將會學到如何在Linux下面安裝、編譯程序,還會學到程序編譯的優化方法,最後會經過源代碼編譯的方式把Squid安裝上。 1.Linux下面程序安裝的基本知識 A.程序安裝包的分類 平時你們在Windows下面安裝程序,通常都是直接運行安裝程序,而後安裝程序會把編譯好的二進制文件拷貝到系統裏面,最終完成安裝過程。 Linux下面,安裝程序的自由度比Windows要大。由於Linux下面大部分東西都是開源的,因此程序的提供方式通常是二進制包或者源代碼包。 二進制包,一樣會有不一樣的打包和管理方式(相似於zip、rar,但更加先進)。最多見的兩種軟件包爲rpm(redhat、suse等系統採用的包)和 deb(debian、ubuntu)。機器上面安裝的軟件包多了,天然須要一個軟件來進行管理、更新。因此就有了yum(rpm)、apt(deb)這 樣的軟件包管理、升級軟件。 源代碼包,這樣的包比較簡單,通常都是直接把源代碼打包成一個壓縮文件,後綴通常是tar.gz或者tar.bz2 經過包管理軟件安裝軟件比較簡單,設置好軟件的安裝源後,可使用下面的命令安裝軟件: yum install php (yum) apt-get install php5(apt) 若是不知道須要安裝的軟件包確切名字,可使用下面的方法搜索: yum search php(yum) apt-cache search php(apt) 本文章主要探討源代碼包的安裝。
B.經過源代碼包安裝程序 通常狀況下,程序從源代碼到能正常使用,須要通過三個步驟:1.根據系統環境對源代碼進行配置(configure);2.編譯程序(make);3.安 裝程序(make install)。 a.源代碼配置 經過運行configure腳本,能夠對所須要編譯的程序的一些基本環境、所使用到的命令、庫等文件進行自動查找,而且生成用於編譯文件所須要的 Makefile文件。由於Linux有太多的發行版本了,每一個版本的環境都不同,因此須要用到這個腳本。經過configure腳本還能夠對程序的模 塊進行自定義,能夠禁用或者激活某個功能。 b.編譯程序 根據configure腳本生成的Makefile文件,對源代碼進行編譯、連接,生成二進制文件。但這個時候的二進制文件通常來講還不能使用。 c.安裝程序 經過make install命令,把編譯好的二進制文件安裝到相應的路徑,這個時候程序才真正可使用。
C.程序安裝到哪裏? 通常編譯安裝的程序都會安裝到/usr/local下面。好比php就會被安裝到/usr/local/bin/php,php.ini會被安裝到 /usr/local/lib/php.ini,等等。若是須要指定安裝目錄,在configure的時候指定--prefix參數,會把全部文件都安裝 到prefix目錄中。好比./configure --prefix=/usr/local/php。那麼會把全部文件都安裝到這個目錄,最後看起來會是/usr/local/php/bin/php和 /usr/local/php/lib/php.ini
D.如何獲得configure的參數? 經常使用的configure參數有--prefix,能夠經過./configure --help獲得更多的參數。通常帶有--enable-、--with-開頭的參數都是啓用某個功能,--disable-、--without-開頭 的都是禁用某個功能。
E.如何刪除安裝好的程序? Linux刪除程序跟Windows不太同樣。Windows建議使用卸載功能卸載程序,Linux下經過包管理軟件安裝的程序也能夠直接用命令刪除,例 如: yum remove php(yum) apt-get remove php5(apt)
若是經過源代碼包安裝的程序,通常會帶有make uninstall,經過這個命令能夠刪除所安裝的文件。若是不帶有make uninstall,那麼能夠直接把程序安裝目錄刪除。 注意:若是是依賴庫(好比php若是要使用到mysql的功能,必需要先安裝mysql,而後在配置php的時候指定mysql庫的路徑,那麼php就是 依賴了mysql),刪除被依賴的程序,那麼用到依賴庫的程序都將會沒法使用(好比刪除mysql後,php將沒法正常使用mysql部分的功能)。
F.還有個make clean是幹什麼用的? make clean用來打掃戰場。把全部編譯時留下的臨時文件、編譯後的二進制文件等都清理掉。通常建議在make install後make clean,方便下次從新編譯和節省空間。
2.源代碼編譯時的優化 用Windows的朋友都知道,平時最頭痛的事情就是程序佔用CPU過高,並且消耗內存特別大。這是由於Windows的程序都是一些「通用」程序,並沒 有針對特定的平臺和特定的CPU進行優化。在Linux下,經過源代碼來編譯二進制文件,這個問題將獲得有效的改善。咱們能夠經過添加優化參數,讓程序針 對某個CPU型號和某個系統進行最大優化,減小文件大小、CPU使用率、內存使用率。 可是,經過指定優化參數來編譯的程序,將再也不具備跨系統跨平臺的能力。就算兩臺機器系統版本同樣,只要CPU不同,程序都沒法運行。程序只能在所編譯的 機器上運行。
通常狀況下,優化參數都是經過export命令設定CFLAGS和CXXFLAGS,而後configure的時候會自動讀入,make的時候會自動使用所選的優化參數。
例如,普通Pentium 4的CPU(顯示的型號爲Intel(R) Pentium(R) 4 CPU XXXXMHz,cpu family: 15,model: 0/1/2)就能夠輸入下面的命令 export CHOST="i686-pc-linux-gnu" export CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer" export CXXFLAGS="${CFLAGS}"
CPU型號等信息能夠經過輸入下面的命令獲得 cat /proc/cpuinfo 將會輸出相似下面的信息
processor : 0 vendor_id : AuthenticAMD cpu family : 15 model : 47 model name : AMD Athlon(tm) 64 Processor 3200+ stepping : 2 cpu MHz : 2000.336 cache size : 512 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt lm 3dnowext 3dnow up pni lahf_lm ts fid vid ttp tm stc bogomips : 4002.57
上面的信息顯示了這是一顆AMD Athlon 64 3200+的CPU。
CPU優化參數能夠從下面地址得到(有些cpu family和model沒有,能夠用相同型號的代替)
http://gentoo-wiki.com/Safe_Cflags
3.編譯Squid的前期準備 咱們須要先了解一個叫作「文件描述符」的東西。咱們知道,人能同時乾的事情是有限的。文件描述符就是一個限制最大上限的東西。文件描述符用來限制一個程序 能同時打開的文件數目,默認是1024。也就是說,若是不修改文件描述符,那麼一個程序只能同時打開1024個文件。1024這個數字,通常程序已經夠用 了,但Squid不行。Squid會同時打開成千上萬個文件,以保證最高的效率和響應速度。 想象一下下面兩種狀況:a.用戶每次訪問squid,squid會按照須要打開文件,而後讀取文件內容再返回給用戶。b.squid預先打開訪問頻率高的 文件,用戶訪問squid,squid直接把內容返回給用戶。相對來講,後面的方法能夠對用戶的請求進行更加快的反應。
要更改文件描述符的大小,必需要修改兩個文件。 /usr/include/bits/typesizes.h /usr/include/linux/posix_types.h 用vi打開上面的文件(若是忘記如何使用,請參考前面章節),查找 #define __FD_SETSIZE 1024 把1024改成65536,而後保存。 爲何是65536,不是更加大?由於這是Linux能接受的最大數值。 剛纔編輯的這兩個文件是C/C++程序裏面的頭文件,編譯squid的時候會被自動引用。除了這兩個文件之外,咱們還須要對當前環境進行設置。 環境,也就是你用ssh登陸到系統時的一些設定。每一個登陸進程均可以進行單獨的設置,在沒有把設置寫入環境配置文件 (.profile,.bash_rc)的狀況下,關閉登陸進程後環境設置會丟失。 舉個例子,你使用pietty開了兩個窗口,使用同一個賬號密碼,同時登陸到同一臺服務器上面,而後在其中一個登陸進程中使用export命令,那麼只會 在這個登陸進程中生效,對另一個登陸進程不起做用。
明白後,咱們說一下ulimit命令。ulimit用來設置當前環境的一些資源限制。剛纔所說的,這個命令是對環境進行設置,因此退出當前登陸進程後命令將會失效。
咱們輸入下面的命令 ulimit -Hs 65536 ulimit -n 65536
H參數是硬性限制,s是堆棧上限,n是文件描述符上限。
最後,咱們使用wget把squid的源代碼下載回來。 wget http://www.squid-cache.org/Versi ... 2.6.STABLE13.tar.gz
wget是unix下一個支持斷點續傳的下載工具。會有一些比較實用的功能,好比把別人整個網站都下載回來(像平時用的小偷吧?)。
第 6 章 編譯並安裝Squid 首先使用tar把源代碼壓縮包解壓
tar zxvf squid-2.6.STABLE13.tar.gz
解壓後,咱們獲得一個名爲 squid-2.6.STABLE13 的目錄。進入目錄
cd squid-2.6.STABLE13
在configure前,咱們必需要先設置cflags,這裏咱們假設CPU是intel core duo的,cpu family 6,model 14。經過 http://gentoo-wiki.com/Safe_Cflags#Intel_Core_Solo.2FDuo 能夠找到對應的優化參數
CHOST="i686-pc-linux-gnu" CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer" CXXFLAGS="${CFLAGS}"
而後經過export命令設置
export CHOST="i686-pc-linux-gnu" export CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer" export CXXFLAGS="${CFLAGS}"
設置完成後,咱們能夠經過env命令來查看是否設置成功。
而後,咱們開始configure源代碼。使用下面的命令,把squid安裝到/usr/local/squid目錄中去。
./configure --prefix=/usr/local/squid --enable-follow-x-forwarded-for --enable-storeio=aufs,ufs --with-maxfd=65536 --with-pthreads --enable-dlmalloc --enable-poll --enable-stacktraces --enable-removal-policies=heap,lru --enable-delay-pools
對應參數的做用可使用./configure --help獲得。 這裏你們要注意下,configure前面還有一個./,這個表明當前目錄。意思是當前目錄下面的configure文件。linux若是要執行當前目錄 的文件,必需要加上./。若是要執行當前目錄下的下級目錄裏面的文件,能夠不用加,好比bin/run。固然,./bin/run也是同樣的效果。 接着咱們會看到屏幕向下翻滾,出現一大堆checking for …的字樣。一直等到下面的文字出現,而且中止,那麼configure就算完成了。
config.status: creating tools/Makefile config.status: creating include/autoconf.h config.status: executing depfiles commands [root@cnc squid-2.6.STABLE13]#
而後,咱們輸入make編譯源代碼,又是一行行的英文翻滾。是否有點感受作黑客的味道?咱們要作的仍是繼續等待下面的文字出現
make[2]: Leaving directory `/root/squid-2.6.STABLE13/tools' make[1]: Leaving directory `/root/squid-2.6.STABLE13/tools' make[1]: Entering directory `/root/squid-2.6.STABLE13' make[1]: Nothing to be done for `all-am'. make[1]: Leaving directory `/root/squid-2.6.STABLE13' [root@cnc squid-2.6.STABLE13]#
這樣源代碼就算編譯完成了。而後咱們運行make install安裝,等待下面的提示
make[2]: Leaving directory `/root/squid-2.6.STABLE13' make[1]: Leaving directory `/root/squid-2.6.STABLE13' [root@cnc squid-2.6.STABLE13]#
這裏要注意:若是任何一個步驟出現帶有error之類的警告,那麼就是編譯出錯,須要檢查究竟是什麼步驟出現問題而且改正。若是嚴格按照本文來編 譯,通常是不會出現錯誤的。另外,cflags參數使用不當一樣會形成編譯錯誤。 若是出現編譯錯誤,必需要先make clean,而後從新make。(若是錯誤是在configure這步就不須要了)
到這裏,squid就算是編譯安裝完畢了。咱們能夠到/usr/local/squid目錄看看,裏面已經躺着一大堆文件了。 [root@cnc squid-2.6.STABLE13]# cd /usr/local/squid [root@cnc squid]# ls -lh total 72K drwxr-xr-x 2 root root 4.0K Jul 7 02:27 bin drwxr-xr-x 2 root root 4.0K Jul 7 02:27 etc drwxr-xr-x 2 root root 4.0K Jul 7 02:27 libexec drwx------ 2 root root 16K Jun 15 08:09 lost+found drwxr-xr-x 3 root root 4.0K Jul 7 02:27 man drwxr-xr-x 2 root root 4.0K Jul 7 02:25 sbin drwxr-xr-x 4 root root 4.0K Jul 7 02:25 share drwxr-xr-x 3 root root 4.0K Jul 7 02:25 var [root@cnc squid]#
接着咱們要作的是配置squid。
第 7 章 配置Squid 1.設置hosts表 首先咱們要明白一下squid在CDN中扮演的角色。squid在CDN中其實只是一個代理+緩存。跟通常的代理服務器相似,squid代替用戶向真正有 內容的服務器進行請求,而且緩存下來。所不一樣的是,squid是做爲一個相似apache同樣的web服務器存在,用戶訪問的時候並不感受到是訪問了一臺 代理服務器,而是一個真實的web服務器。通常狀況下,咱們把這種方式稱之爲「反向代理」。 因此,咱們須要讓squid知道內容要到哪裏去取。由於咱們已經把域名naizhao.com設置了智能DNS,並且這臺squid服務器也是網通的,按 照正常的dns解析,會把naizhao.com解析爲2.2.2.2這個IP(也就是網通機器自己)。但這個IP上面並不存在任何所須要的內容,全部需 要的內容實際上是在1.1.1.1上(源服務器)。因此咱們須要爲naizhao.com固定一個IP,也就是1.1.1.1。 讓系統獲得這個IP的方法有兩種,一種是設置hosts表,另一種是系統裏面搭建一個dns服務器。Windows下你們應該會常常去編輯到hosts 文件,linux下一樣也存在這個文件,咱們在前面的vim教程中已經提到過。搭建dns系統這個方法工程太過龐大,仍是編輯hosts文件相對來講比較 簡單,因此咱們就採用編輯hosts表的方法。 linux下面的hosts表位於/etc/hosts,格式跟Windows大體相同,打開後咱們把下面一行加到末尾
1.1.1.1 naizhao.com www.naizhao.com cnc.naizhao.com
若是已經按照前面的教程,添加過1.1.1.1這條記錄的,修改成上面的樣子。 2.設置squid squid的配置文件位於/usr/local/squid/etc/squid.conf,打開後會有英文的詳細說明。暫時咱們不須要去理解這個文件裏 面各個配置的含義,相信你們看到一大堆英文都會頭大的。你們只須要知道如何把squid按照本身的需求跑起來,而且不出錯就好。 咱們先用rm命令把squid.conf刪掉。不用怕刪掉後找不回來,還有一個默認的squid.conf.default在呢。通常的linux程序, 包括apache等,都會有一個.default的默認文件,方便你們恢復默認設置,或者做爲一個修改的參考。 squid.conf刪掉後,咱們再用vi squid.conf,新建這個文件,而後把下面的內容帖進去,保存 http_port 80 vhost vport=80 acl apache rep_header Server ^Apache broken_vary_encoding allow apache cache_mem 1024 MB maximum_object_size 4096 KB minimum_object_size 0 KB maximum_object_size_in_memory 256 KB cache_dir ufs /var/spool/squid 20480 16 256 cache_swap_low 80 cache_swap_high 97 strip_query_terms off request_body_max_size 5 MB memory_pools on memory_pools_limit 50 MB access_log none cache_log /var/log/squid/cache.log cache_store_log none pid_filename /var/run/squid.pid hosts_file /etc/hosts refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i naizhao/.com 240 100% 1440 ignore-reload refresh_pattern -i www/.naizhao/.com 240 100% 1440 ignore-reload refresh_pattern -i .gif 180 20% 10080 override-expire ignore-reload reload-into-ims refresh_pattern -i .jpg 180 20% 10080 override-expire ignore-reload reload-into-ims refresh_pattern . 120 50% 1440 acl all src 0.0.0.0/0.0.0.0 acl p-manager proto cache_object acl s-localhost src 127.0.0.1/255.255.255.255 acl d-localhost dst 127.0.0.0/8 acl d-domains dstdomain .naizhao.com acl p-ssl port 443 563 acl p-safe port 80 443 563 acl m-conn method CONNECT acl m-purge method PURGE acl n-maxconn maxconn 15 http_access allow p-manager s-localhost http_access allow m-purge http_access deny !p-safe http_access deny m-conn !p-ssl http_access deny n-maxconn http_access allow p-manager http_access allow d-domains http_access deny all http_reply_access allow all acl r-url urlpath_regex realtime cache deny r-url icp_access allow all follow_x_forwarded_for allow all acl_uses_indirect_client offrange_offset_limit -1 dns_timeout 2 seconds forward_timeout 10 seconds connect_timeout 10 seconds peer_connect_timeout 6 seconds read_timeout 10 seconds request_timeout 6 seconds persistent_request_timeout 16 seconds cache_mgr silence.z@gmail.com cache_effective_user nobody cache_effective_group nobody visible_hostname cnc.naizhao.com logfile_rotate 0 always_direct allow all error_directory /usr/local/squid/share/errors/Simplify_Chinese coredump_dir /var/spool/squid
須要說明的幾個參數: cache_mem 1024 MB (squid使用的內存大小,注意必需要留下500M左右的內存給系統使用,建議系統內存2G,而後分配1G給squid)
cache_dir ufs /var/spool/squid 20480 16 256 (緩存的目錄,放在/var/spool/squid下面,大小是20G,第一級目錄是16個,第二級目錄是256個。由於一個目錄下面放置的文件和目錄 數量有限制,因此這裏必需要設置多個目錄,以適合squid存放大量文件的須要。目錄數千萬別設置太大,不然會引發系統死機)
memory_pools_limit 50 MB (內存池,用來存放緩存文件的鏈表,方便高速查找文件存放的對應位置,不須要太大。不懂就別管了)
cache_log /var/log/squid/cache.log(log文件的存放位置,必需要有讀寫權限,稍後說到)
refresh_pattern -i naizhao/.com 240 100% 1440 ignore-reload refresh_pattern -i www/.naizhao/.com 240 100% 1440 ignore-reload refresh_pattern -i .gif 180 20% 10080 override-expire ignore-reload reload-into-ims refresh_pattern -i .jpg 180 20% 10080 override-expire ignore-reload reload-into-ims (上面的幾行指定了文件緩存的時間,能夠指定某個域名,也能夠指定某個文件類型。有更加多的域名或者文件類型就按照須要添加吧。-i是忽略大小寫, naizhao.com和.gif是文件類型,240是最小緩存的時間,1440是最大緩存時間,都是分鐘。這些先不用管,有須要的時候調整就行了。咱們 的口號是:先跑起來)
acl d-domains dstdomain .naizhao.com(容許訪問的域名列表。若是要跑多個網站就添加多幾個,用空格分開。naizhao.com前面有個英文的.,表示全部 *.naizhao.com都容許。若是沒有這個點,那麼就只容許naizhao.com,訪問www.naizhao.com就會提示訪問被拒絕。)
cache_mgr silence.z@gmail.com (管理員的郵件地址,改成本身的)
cache_effective_user nobody cache_effective_group nobody (用來跑squid的用戶和用戶組。爲了不使用root賬號形成的不安全因素,大部分linux程序都會先用root運行,而後立刻把運行的用戶從 root切換到其餘用戶,這樣就算程序有漏洞被黑了,黑客也只能獲得這個普通用戶的權限,對系統的危害將大大下降。保持默認便可)
visible_hostname cnc.naizhao.com (服務器輸出的機器名字,多臺squid分佈的時候這個很重要,經過設置多個不一樣的名字,很容易就能夠找出哪臺服務器有問題)
coredump_dir /var/spool/squid (squid掛掉後,臨終遺言要放到哪裏。不用管,通常人看不懂)
修改好配置文件後,咱們還須要作一些最後的工做。 先建一個log目錄,用來存放log文件。按照squid.conf的設置,咱們輸入下面的命令
mkdir /var/log/squid chown nobody:nobody /var/log/squid
chown命令是設置全部者和組。剛纔說了,squid將會使用用戶nobody組nobody來運行。nobody:nobody冒號前面的是用戶,後面的是用戶組。 還有squid的緩存目錄,一樣須要設置權限爲nobody:nobody
chown nobody:nobody /var/spool/squid
查看命令是否成功,可使用ls -lh
ls -lh /var/spool/ …… drwxr-xr-x 3 nobody nobody 4.0K Jun 15 08:19 squid
剩下最後一步,初始化squid的緩存目錄結構。(也就是剛纔說的16個一級目錄,256個二級目錄。自己這些文件夾不存在,須要經過squid的命令創建)
squid的命令在/usr/local/squid/sbin下,咱們進入這個目錄,而後看看squid命令的幫助
./squid -h Usage: squid [-hvzCDFNRYX] [-d level] [-s | -l facility] [-f config-file] [-u port] [-k signal] -d level Write debugging to stderr also. -f file Use given config-file instead of /usr/local/squid/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. -F Don't 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. -Y Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.
咱們能夠看到-z命令就是創建緩存目錄的,因此咱們輸入
./squid -z 2007/07/07 07:52:03| Creating Swap Directories
沒有任何錯誤提示,說明目錄已經創建成功了,咱們能夠用 ls /var/spool/squid看看效果。
最後,咱們讓squid跑起來
./squid -Nd 10
2007/07/07 07:53:50| Starting Squid Cache version 2.6.STABLE13 for i686-pc-linux-gnu... 2007/07/07 07:53:50| Process ID 3135 2007/07/07 07:53:50| With 1024 file descriptors available 2007/07/07 07:53:50| Using poll for the IO loop 2007/07/07 07:53:50| Performing DNS Tests... 2007/07/07 07:53:50| Successful DNS name lookup tests... 2007/07/07 07:53:50| DNS Socket created at 0.0.0.0, port 1026, FD 4 2007/07/07 07:53:50| Adding nameserver 211.147.6.3 from /etc/resolv.conf 2007/07/07 07:53:50| Adding nameserver 61.233.9.9 from /etc/resolv.conf 2007/07/07 07:53:50| Unlinkd pipe opened on FD 8 2007/07/07 07:53:50| Swap maxSize 20971520 KB, estimated 1613193 objects 2007/07/07 07:53:50| Target number of buckets: 80659 2007/07/07 07:53:50| Using 131072 Store buckets 2007/07/07 07:53:50| Max Mem size: 1048576 KB 2007/07/07 07:53:50| Max Swap size: 20971520 KB 2007/07/07 07:53:50| Store logging disabled 2007/07/07 07:53:50| Rebuilding storage in /var/spool/squid (DIRTY) 2007/07/07 07:53:50| Using Least Load store dir selection 2007/07/07 07:53:50| Set Current Directory to /var/spool/squid 2007/07/07 07:53:50| Loaded Icons. 2007/07/07 07:53:52| Accepting accelerated HTTP connections at 0.0.0.0, port 80, FD 7. 2007/07/07 07:53:52| Accepting ICP messages at 0.0.0.0, port 3130, FD 9. 2007/07/07 07:53:52| WCCP Disabled. 2007/07/07 07:53:52| Ready to serve requests. 2007/07/07 07:53:52| Done scanning /var/spool/squid (0 entries) 2007/07/07 07:53:52| Finished rebuilding storage from disk. 2007/07/07 07:53:52| 0 Entries scanned 2007/07/07 07:53:52| 0 Invalid entries. 2007/07/07 07:53:52| 0 With invalid flags. 2007/07/07 07:53:52| 0 Objects loaded. 2007/07/07 07:53:52| 0 Objects expired. 2007/07/07 07:53:52| 0 Objects cancelled. 2007/07/07 07:53:52| 0 Duplicate URLs purged. 2007/07/07 07:53:52| 0 Swapfile clashes avoided. 2007/07/07 07:53:52| Took 2.0 seconds ( 0.0 objects/sec). 2007/07/07 07:53:52| Beginning Validation Procedure 2007/07/07 07:53:52| Completed Validation Procedure 2007/07/07 07:53:52| Validated 0 Entries 2007/07/07 07:53:52| store_swap_size = 0k 2007/07/07 07:53:53| storeLateRelease: released 0 objects
打開瀏覽器,輸入http://2.2.2.2,會看到Access Denied的錯誤提示,說明squid已經正常跑起來了。
由於指定了-d參數,因此如今squid會把全部的調試信息都輸出終端。 按下鍵盤的ctrl+c,而後輸入killall squid殺死squid,能夠終止squid的進程。
第 8 章 測試並運行Squid 1.前期準備 想要測試Squid是否正常,必需要先把www.naizhao.com這 個域名解析到2.2.2.2這個IP上。跟上一章同樣,若是你是網通用戶就不須要作任何操做,DNSPod會給你返回2.2.2.2這個IP。若是你是電 信用戶,或者解析出來的IP不是2.2.2.2,那麼就要修改系統的hosts表,對應記錄添加進去。跟上一章不同,上一章修改的是Squid服務器的 hosts表,你如今須要修改的是你用來測試Squid的系統的hosts表。 除了修改hosts表外,咱們還須要一個名爲curl的小工具。通常的Linux/Unix系統都附帶了這個工具,若是使用Windows,那麼須要到下 面的地址下載一個,而且放到D:/(或者其餘地方,本身喜歡)。 http://curl.haxx.se/latest.cgi?curl=win32-nossl (32位系統) http://curl.haxx.se/latest.cgi?curl=win64-nossl (64位系統) 下載回來解壓後,咱們只須要一個curl.exe。
2.運行Squid 咱們繼續用上一章的方法,用調試方式啓動squid cd /usr/local/squid/sbin ./squid -Nd 1 而後打開瀏覽器,輸入http://www.naizhao.com,看輸出的網頁是否正確。 若是能顯示出正常的頁面,那麼說明squid已經正常運行了。但咱們還須要確認一下,所須要的頁面是否已經被squid緩存了。
3.測試Squid 咱們使用curl,輸入下面的命令(Windows用戶請使用命令行來運行curl) curl -I http://www.naizhao.com/
HTTP/1.0 200 OK Date: Sun, 08 Jul 2007 12:16:27 GMT Server: NaiZhao Web Server/1.0.0 Last-Modified: Wed, 13 Dec 2006 06:11:14 GMT ETag: "7665b-1983-4417e480" Accept-Ranges: bytes Content-Length: 6531 Vary: Accept-Encoding Content-Type: text/css Age: 29155 X-Cache: MISS from cnc.naizhao.com Via: 1.0 cnc.naizhao.com:80 (squid/2.6.STABLE13) Connection: close
咱們留意輸出的內容,下面一行內容表示並無命中緩存。也就是並非從緩存中讀取所需文件。通常第一次訪問一個文件的時候,出現MISS是正常的, 由於原本文件就不存在於緩存中。 X-Cache: MISS from cnc.naizhao.com 而後,咱們從新運行一次命令,繼續看輸出的內容 curl -I http://www.naizhao.com/
HTTP/1.0 200 OK Date: Sun, 08 Jul 2007 12:16:27 GMT Server: NaiZhao Web Server/1.0.0 Last-Modified: Wed, 13 Dec 2006 06:11:14 GMT ETag: "7665b-1983-4417e480" Accept-Ranges: bytes Content-Length: 6531 Vary: Accept-Encoding Content-Type: text/css Age: 29155 X-Cache: HIT from cnc.naizhao.com Via: 1.0 cnc.naizhao.com:80 (squid/2.6.STABLE13) Connection: close
能夠看到,此次的輸出已是HIT了。也就是表示,內容是從緩存中讀取的。 若是第二次訪問仍然是MISS,那麼你就要檢查下網頁是否限制了緩存。能夠從下面幾個方面入手:
Last-Modified: Wed, 13 Dec 2006 06:11:14 GMT 檢查這行是否每次訪問都變化。若是一直變化,說明頁面是動態的,並不合適squid緩存。squid在每次請求的時候都會檢查這行,判斷頁面是否已通過 期,而且對過時的頁面從新獲取。
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 這行是負責控制緩存。no-store、no-cache、must-revalidate等都是要求squid禁止緩存內容,而且在每次請求的時候都去 驗證頁面是否過時。
Expires: Thu, 19 Nov 1981 08:52:00 GMT 過時時間若是大於當前時間,也會被認爲是頁面已通過期,須要從新獲取。這樣的頁面也不會被緩存。
Pragma: no-cache 這句也是禁止緩存。
你們能夠按照上面的內容進行自查自糾,根據實際需求對網站進行修改便可。 確認沒有問題後,咱們就可讓Squid正式跑起來了。
4.正式運行Squid ulimit -Hs 65536 ulimit -n 65536 ./squid 直接使用上面的命令就可讓squid跑起來了。 跑起來後,輸入http://www.naizhao.com看看訪問是否正常。
5.讓Squid跟隨系統啓動 CentOS讓Squid跟隨系統啓動很簡單,只須要編輯/etc/rc.local,在最後加上下面內容便可 ulimit -Hs 65536 ulimit -n 65536 /usr/local/squid/sbin/squid
zz:http://blog.csdn.net/yujian5211314/archive/2008/06/20/2568436.aspx