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

Squid+MRTG實現緩存代理

  Squid是一種源代碼開放的高性能代理緩存服務器。它可支持FTP,gopher和Http數據對象的代理。另外,Squid也支持SSL,多樣化訪問控制和代理請求的完整日志功能。通過輕量級的網際緩存協議,Squid以網狀或層次的方式分配內存,這樣能節省額外的帶寬。提供Http服務加速代理,Web服務器把Http數據推到Squid緩存中,外界的請求訪問可以通過緩存提取所需數據,實現Web服務器的動態鏡像。 另外,為了實現對Squid服務器的監控,采用MRTG。MRTG 是 Multi Router Traffic Grapher 的縮寫,它主要的用途是監測網絡服務設備的流量,並生成包括圖片的Html文件,可以直觀的顯示網絡服務的流量,以提供Squid緩存服務的監測。 通過Squid+MRTG可以配置一個完善的代理服務提供方案。下面為具體配置步驟: 一.基礎准備 Squid下載地址:http://www.squid-cache.org 版本:squid-2.4.STABLE4-src.tar.gz MRTG下載地址:http://people.ee.ethz.ch/~oetiker/weBTools/mrtg/pub/ 版本:mrtg-2.9.22.tar.gz 機器配置為:256M內存,9G硬盤(其中4G分區專用緩存目錄),PII433。 二.安裝步驟 解壓Squid(一般做法,把軟件包括在/opt目錄下) #tar zxvf squid-2.4.STABLE4-src.tar.gz #cd squid //進行編譯 #./configure --prefix=/usr/local/squid --enable-delay-pools --enable-snmp --enable-cache-digests --enable-auth-modules=”NCSA” #make all #make install *對編譯項目的解釋: --prefix 為編譯Squid所存放的目錄,這裡為/usr/local/squid --enable-delay-pools 此選項使能一個延時池,這樣能對某些特定的請求限制額定帶寬。 --enable-snmp 此選項可以讓MRTG使用SNMP協議對服務器的流量狀態進行監測,因此必須選擇此項,使Squid支持SNMP接口。 --enable-cache-digests 使能緩存摘要,本來此項目的是為了在Squid集群服務之間迅速發現緩存對象,這裡在本地使用,可以加快請求時,檢索緩存內容的速度。 --enable-auth-modules 此編譯選項啟用認證模塊,可以對訪問代理用戶進行授權。 安裝MRTG #tar zxvf mrtg-2.9.22.tar.gz #cd mrtg* #./configure --prefix=/usr/local/mrtg-2 #make #make install /* 幾點說明: 1.MRTG大部分程序是用Perl腳本寫成,需要Perl版本為5.005以上才能運行,RH 7.2帶有perl版本為v5.6.0,非常滿足要求。(如果版本不夠,請到www.perl.com下載安裝。) 2.MRTG需要zlib,gd和libpng三個處理圖形的庫支持,RH7.2滿足此要求。(如果沒有安裝,請到http://www.boutell.com/gd/ http://www.libpng.org/pub/png/src/ http://www.gzip.org/zlib 下載安裝) 三.具體配置 lSquid配置(僅對必要選項配置並說明): http_port 80 此選項用於Squid代理所偵聽的端口,由於要實現Http加速代理,則偵聽端口80 tcp_outgoing_address 255.255.255.255 此句法指定了遠程服務器的IP地址,這裡我們使用255.255.255.255來指定為所有地址 tcp_incoming_address 這裡可以使用http_port語法進行綁定端口和IP地址。表示客戶端的請求。可以不使用。 cache_mem 64 MB 由於Squid在讀寫磁盤,I/O通道,數據轉貯等需要大量內存,我們可以把內存值稍微設置大一些,這樣可以提供服務器性能。 cache_swap_low 95 這用做表示緩存內部對象的替換的衡量基線。當交換分區的磁盤利用率超越這個基線,那麼緩存對象替換也就隨之開始。這裡是用百分率做衡量標准。


cache_swap_high 98 此標記用於緩存對象替換的最高程度,當交換分區磁盤利用率接近此設置,則表示對象的更新程度更為劇烈。這裡由於我的緩存區設置比較大,因此設置為98%。 下面幾個配置標記采用系統默認配置。 { maximum_object_size 4096 KB { 超過此尺寸的對象將不緩存。 { minimum_object_size 0 KB { 小於此尺寸的對象將不緩存。 { maximum_object_size_in_memory 8 KB { 內存中能緩存的最大對象尺寸。 { ipcache_size 1024 { 指定IP緩存大小。 { ipcache_low 90 { 緩存IP地址的最低基線。 { ipcache_high 95 { 緩存IP地址的最高極限。 { fqdncache_size 1024 { 緩存DNS全域名解析的尺寸。 cache_replacement_policy lru 此標記用於當緩存新對象時,使用緩存策略來清除緩存中特定對象。這裡使用lru表示:它只替換長時間沒有被訪問過的對象。其他策略請參看配置文檔介紹。 memory_replacement_policy lru 此用法同上,區別在於替換內存對象。 cache_dir ufs /cache 4000 16 256 設置緩存根目錄為/cache,類型為ufs,緩存區大小為4G,可以有16個二級子目錄,每有二級目錄有256個三級子目錄。 cache_Access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log cache_swap_log /var/log/squid/swap.log 上面幾項是緩存日志記錄的路徑和文件名。 log_ip_on_direct on 記錄客戶端主機的IP地址。 log_fqdn on 記錄全DNS域名解析。 mime_table /usr/local/squid/etc/mime.conf Squid所用mime的文件路徑 pid_filename /usr/local/squid/logs/squid.pid Squid進程ID的文件。 ftp_user [email protected] 這裡可以使用匿名登陸FTP服務器。 ftp_list_width 32 FTP文件列表長度,超過長度則截斷文件名。 ftp_passive on 允許主動連接FTP服務器。 dns_nameservers 202.98.187.1 指定代理的域名解析服務器。 authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd 代理認證程序,這裡在/usr/local/squid/etc使用htpasswd產生一個密碼文件,具體方法如下: #htpasswd –cdb passwd auth_usr1 pass1 #htpasswd –db passwd auth_usr2 pass2 #htpasswd –db passwd auth_usr3 pass3 創建passwd文件,並添加auth_usr1,auth_usr2,auth_usr3三個認證用戶。 authenticate_children 5 所需要要產生的認證進程數。 authenticate_ttl 3600 此標記設置認證保持時間。 authenticate_ip_ttl 1800 此標記設置認證綁定IP地址的時間長度。 authenticate_ip_ttl_is_strict on 此標記可在authenticate_ttl時間內,拒絕其他非認證IP地址訪問。 request_header_max_size 10 KB request_body_max_size 1 MB 設置了Http請求的包頭和數據大小。 request_body_max_size 0 這裡,請求所返回的數據大小為0,意義為沒有任何限制。 connect_timeout 180 seconds read_timeout 15 minutes request_timeout 20 seconds 上面幾項是代理服務幾個超時設置,這裡使用配置文件默認值。 下面是訪問控制列表一些配置,這裡對訪問的IP地址,域名,訪問類型極其訪問代理的權限做的限制: acl acldomain dstdomain .ynst.net.cn acl acceleratedport port 80 acl acceleratedhost dst 202.98.187.17/255.255.255.255

acl aclprotocol proto HTTP FTP acl aclmethod method GET POST acl aclauth proxy_auth required (注:這裡使用required表示任何passwd文件中存在的合法用戶才授予訪問權限。) acl aclsnmp snmp_community secrect MRTG可以使用snmp協議檢測此代理服務運行狀態。 acl aclconn maxconn 20 可並行連接的最大數量。 啟用定義的訪問控制列表 http_access allow manager localhost http_access deny manager http_access allow aclauth http_access allow acceleratedport acceleratedhost http_access deny all 下面為緩存管理設置 cache_mgr [email protected] 設置緩存管理者的接受郵件地址。 cache_effective_user squidusr cache_effective_group squidgrp 設置執行Squid的用戶和用戶組。 {注:設置用戶和用戶組及其權限修改方法如下: #groupadd squidgrp #useradd –g squidgrp –d /home/squidusr squidusr 修改log日志權限屬性,使squidusr有寫權限。 #chown squidusr /var/log/squid #chgrp squidgrp /var/log/squid #chown squidusr /var/log/squid/*.log #chown squidgrp /var/log/squid/*.log } 下面配置Http服務加速代理 httpd_accel_host 202.98.187.17 httpd_accel_port 80 httpd_accel_with_proxy on (注:如果配置代理和加速服務,必須httpd_accel_with_proxy選項打開。如果需要配置多個加速,可以使用虛擬的概念。) snmp_port 3401 此標記設置snmp_port端口為3401,可以使MRTG監測服務運行狀態。 snmp_access allow aclsnmp localhost snmp_access deny all snmp_incoming_address 0.0.0.0 snmp_outgoing_address 0.0.0.0 以上選項用於配置和MRTG交互信息的Snmp設置。 digest_generation on digest_rebuild period 1 hour digest_rewrite_period 1 hour digest_swapout_chunk_size 4096 bytes digest_rebuild_chunk_percentage 10 產生緩存摘要,並設置摘要重構所需要的時間及其相關設置,這裡采用系統默認設置。緩存摘要使的龐大的緩存內容形成一個微型檢索,提高代理性能。 最後我們進行延遲隊列池進行配置 延遲隊列池可以基於一定規則對特定請求數據的進行限制,這樣可以防止惡意用戶發送非正規數據串攻擊服務器。 以下選項只在必要處進行說明,配置如下: delay_pools 1 #定義一個池 delay_class 1 1 #池為1類型 delay_access 1 allow all #允許類型1的所有請求訪問 delay_parameters 1 128000/128000 #限制訪問的128k/s delay_initial_bUCket_level 50 #Squid啟動時,初始化池所用的帶寬數量。 運行Squid代理服務: #squid –z /*創建Squid所使用的緩存目錄結構 如果想在前台運行 #squid –NCdl 如果想在後台運行 #squid 檢查Squid是否運行 #squid –k check   lMRTG配置: 首先測試SNMP服務是否啟動: #snmpwalk -p 3401 hostname communitystring .1.3.6.1.4.1.3495.1.1 如果看到如下輸出: enterprises.nlanr.squid.cacheSystem.cacheSysVMsize = 7970816 enterprises.nlanr.squid.cacheSystem.cacheSysStorage = 2796142 enterprises.nlanr.squid.cacheSystem.cacheUptime = Timeticks: (766299) 2:07:42.99

則說明SNMP正常工作。 按照mrtg.hdl.com的文檔,使用cfgmaker和indexmaker就可以生成MRTG所需要的Web發布文件。使用cfgmaker可以創建配置MRTG所需要的配置文件,而Indexmaker則是檢索MRTG生成的Web文件,制作一個。這裡,我提供一種更為簡潔的辦法: (感謝Chris提供的mrtg-squid.cfg文件和index.html,可到http://www.psychofx.com/chris/unix/mrtg/ 下載這兩個文件。) 修改mrtg-squid.cfg文件選項如下: 修改 WorkDir 和 LoadMIBs 路徑設置 修改所有出現在文件中的"hostname" 為你實際服務器名字 修改所有 "chris"字段為你需要的名字和地址 修改community 字串屬性 這裡配置如下: WorkDir: /home/www/mrtg/squid LoadMIBs: /usr/local/squid/etc/mib.txt 所有public@hostname修改secrect@proxysvr 創建/home/www/mrtg/squid這樣一個目錄。 #mkdir /home/www/mrtg/squid #cd /home/www/mrtg/squid #cp /opt/mrtg-squid.cfg . #mrtg mrtg-squid.cfg #cp /opt/index.html . 修改/etc/httpd/conf/httpd.conf如下幾個選項 Listen 8000 Port 8000 Documentroot /home/www/mrtg/squid 由於mrtg讀取文件需要資源,因為合理設置讀取間隔,這裡我設置為5分鐘: crontab –e */5 * * * * /usr/local/mrtg-2/bin/mrtg /home/www/mrtg/squid/mrtg-squid.cfg 這樣,我們就建立了一個完善的代理加速訪問服務器,通過mrtg的強大監控,可以統計服務器運行時設備運行狀態。由於以上軟件遵從GNU,因此一種強大而有經濟的建站手段。通過認證控制,允許特定用戶使用代理服務。而Web加速服務器則成為服務器鏡像的方便手段







Copyright © Linux教程網 All Rights Reserved