歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Squid Proxy Server基礎入門

  簡介:   九十年代是網際網路大放異彩的年代,尤其是World Wild Web的出現更使得人與人之間的距離越來越小,但是圖形、影像和聲音的劇增對原本速度就不快的internet來說無疑是雪上加霜,因此大大小小Proxy server便油然而生,其目的是為減輕網路負載,也可加快client端網頁浏覽的速度。當初proxy server本為保護firewall內主機的安全並做為local與remote間的傳輸煤介,關如下      Client端不但可以流覽網頁,也可以透過Proxy存取Inetrnet資源並抵擋外界的網路風暴與破壞。     說明:   Squid Internet Object Cache (Harvest Project的後續版本) 是美國政府大力助的一項研究計畫,其目的為解決網路頻寬不足的問題,是現在Unix系統上使用者最多功能也最完整的一套軟體,目前台灣三大網Tanet、Hinet和Seednet有超過95%以上的Proxy Server使用。Apache和Netscape雖附有Proxy軟體,但因功能簡單而不夠普及。有關squid的詳細說明可到squid網站查詢http://squid.nlanr.net/Squid/。     安裝說明:   我們這次安裝的平台是Pentium 200 MMX,使用32 mb 記憶體,有2.5 gb的硬碟,安裝的是Slackware-3.3 Linux,核心為 linux-2.0.30。目前squid穩定的版本是1.1.16,另有一個並行發展的軟體squid-1.NOVM.16是適合於使用較少虛擬記憶體的主機,如使用的swap memory很小的話可以下載這個版本,但是file descriptors會變大,確定了我們所要使用的軟體後,再來就可以把軟體下載到主機中,這次我們使用的是squid-1.1.16.tar.gz,首先用adduser增加一個proxy user,因為使用root帳號開啟proxy server會有安全上的問題且程式本身也不允許,再來的動作都由proxy user來完成,如此才不會有權限不足而導致cache無法寫入的影響,把剛傳下來的squid-1.1.16.tar.gz用tar解開,進入squid目錄中依序輸入     ./configure --prefix=/usr/local/squid     make all     make install     便完成了所有compiler和install的過程,此時我們的 squid完全install到/usr/local/squid目錄下,進入安裝完成的目錄中或是link過來也可以,我們可以看到三個目錄分別是bin、etc與log,進入bin中使用 squid z把要cache的目錄建立起來,再來編輯etc目錄下的squid.conf,有關 squid.conf語法稍後會詳述,完成所有設定後便可以背景執行squid或是放在/etc/rc裡,成一開機便執行的daemon,執行後可使用bin裡的client測試squid是否成功的執行,方法 client h localhost p 3128     squid.conf 設定說明:   http_port: squid接受client端http需求使用的阜號,預設 值3128,在命令列中也可使用squid a做設定。     icp_port: squid接收或傳送icp訊號所使用的阜號,預設值為3130,如非必要不需做修改,也可使用squid u在命令列中做設定。icp是一種udp_base的封包,主要的功能為web cache主機間連絡的訊息格式,也因為是udp_base的封包,所以速度上也就比client與server間的tcp封包還來的快,可減少cache主機間傳送的時間。     cache_host: 設定其它的cache主機,當server收到client端的request時,便透過3130這個port傳送icp給設定中的每一台cache主機,如cache host有client端所需求的資料,便傳送一份給server,如沒有server便自己抓取資料。例:     cache_host proxy.nsysu.edu.tw sibling 3128 3130 option     第一為hostname。     第二為type 有 “parent” “sibling” “multicast”。     在web cache的階層裡,同一個cache level裡以sibling稱之,在上位者則為parent,不過在整個cache level中並沒有很明顯的分層,所以每一台主機有可能是sibling 或是 parent。當server收到request時,先對所有的sibling和parent送出ICP去詢問,等待回應開始對第一個回應HIT的cache抓object,如沒有人回覆HIT,就對先回覆MISS的parent開始抓取,找到資料後送給host並自己cache起來,若都失敗server便乖乖的自己去source抓取資料。     第三為proxy_port 為cache主機的porxy port。     第四為icp_port cache主機接收icp的port,通常為3130。     第五為option 有proxy-only、weight=n、ttl=n、no-query、default、round-robin、multicast-responder等。當proxy server的儲存空間很少時,可加上proxy-only,server便不會把資料cache住,直接將資料送往client。Weight值為與parent間的依賴性,值越大依賴性越大,預設值為1。     Inside_firewall:設定firewall內主機domain。     Local_domain:設定local_domain主要是把這些網域視為本身網域的一部份,如此一來當所要抓取的URL為是在本網域中,則不必再向Neighbor/Sibling詢問了,只要是與有直接連線的都可設為local_domain。     Local_ip:與local_domain同。     Neighbor_timeout:當送出icp時等待回應的時間。     Cache_mem:用來儲存物件的記憶體大小,包括in-transit、negative和”hot”物件,通常設定實體記憶體的三分之一大小,所謂的實體記憶體是只主記體加上swap memory。In-transit比negative與hot等物件擁有較大的優先權,當有資料進來時,negative與hot objects將會首先被更新,換句話說,兩者將會填滿所有in-transit objects沒有使用的記憶體空間。     Cache_swap: Proxy使用的最大磁碟空間,當使用的空間接近此值的話,cache使用LRU(Least-Recently-Used)的設定來刪除過久的資料。Squid對物件的清除是由每個物件的LRU年齡檔標准,如太久沒用的就會先被清除掉,倘若cache占硬碟的容量低時,物件較不易被清除,但若cache越來越滿時,LRU限制較高,資料清除較快。     Cache_log:硬碟中所要當cache的目錄。     Log_fqdn:如client有domain name的話,Access.log便會把domain name完整的記錄下來。     FTP_user:假如需要使用 anonymous ftp來抓取檔案,會送出後面所接的字串當 passWord。     Dns_children: Squid本身附有一個dnsserver程式來處理client端domain name的需求,一般來說,當proxy有較大的使用量時,dns children設定較多可以處理的domain name request較多也較快,但當設定過多的dnsserver對系統的performance也會有相當的影響,可使用cache manger來觀看每個dnsserver的使用量決定數量的多寡。     Refresh_pattern:更新cache的時間,其演算法則如下:     FRESH if age < min     STALE if eXPires < now     STALE if age > max     FRESH if lm-factor < percent     使用格式:refresh_pattern regex min percent max     reference_age:物件的LRU,若比值大的話便清除cache中的物件。例如設定一星期,如一星期內沒有存取動作,就把物件從cache中移出,假如值為零的話,物件會存放於cache中直到cache swap上限。     Read_time:當proxy與web連接後,經過read_time的時間接收不到web站傳送資料便斷線,有可能是remote server或是網路連接突然性的中斷等因素。     Shutdown_lifetime:當cache server收到SIGTERM或是SIGHUP時,squid會對使用端發出”shutdown pending”訊息,並關掉所有正在進行中的動作,直到squid重新啟動。     Cache_mgr: cache server管理者的email信箱,當server無故死掉時,squid會發出一封信至管理者信箱。     Cache_effective_user:啟動squid的user名稱,包含UID與GID兩個欄位。     Err_Html_text:使用者浏覽網頁中,常常遇到不存在或連線中斷的網站,squid本身會回應一個error message至用戶端,squid管理者可使用這個參數來改變回應至用戶端的error message,來連接至管理者的homepage。     Deny_html_text:若遇到access control fail的情況,回應一個access fail message,squid本身提供一個簡單的message,可利用此功能連接至homepage。     以上是 squid.conf的大部參數介紹,已包括所有架設一個功能完整的cache server的所有設定。     研究分析:   Squid的特點也是它優於其它cache軟體的地方,就是其Access Control Lists的部份,使用acl可設定那些client發出的request會被接受,那些會被擋住,如此可減輕server端網路負載的問題。     首先在squid.conf中定義acl name,以便於之後來設定其存取權。其格式如下:     acl aclname acltype string1…..     acl aclname acltype “file”….     File必須編輯ip name而且每一行只能有一項     acltype有下列幾項:   acl aclname src ip-address/netmask     (定義client的ip和netmask)     acl aclname src addr1-addr2/netmask     (定義一段ip address區間和netmask)     acl aclname dst ip-address/netmask     (URL的網路位址和遮罩)     acl aclname srcdomain kyit.edu.tw     (定義反查的domain)     acl aclname dstname kyit.edu.tw     (定義URL的domain)     acl aclname time [day-abbrevs] [h1:m1-h2:m2]     day-abbrevs:星期日至星期六     acl aclname url_regex ^http:// …     (定義符合URL字串的部份)     acl aclname urlpath_regex xxxxx     (定義URL的目錄有符合的部




Copyright © Linux教程網 All Rights Reserved