Squid學習筆記

Squid學習筆記


1、安裝前的配置

編譯安裝之前需要校正的參數主要包括File Descriptor和Mbuf Clusters。

1、File Descriptor

查看文件描述符的限制數目:

ulimit –n

調整文件描述符的數目需要3步:

step 1,編輯系統頭文件/usr/include/bits/types.h

define __FD_SIZIEFD 8192

step 2,調整內核的FD限制數目

echo 8192 > /proc/sys/fs/file-max

step 3,修改當前shell環境的FD限制數目

ulimit –Hn 8192

 

2、Mbuf Clusters

 

3、調整臨時端口的範圍

Squid與Client連接的Local Port默認值爲3128,與Server連接的Remote Port默認值爲80。當Squid與源服務器建立連接時,系統會給本地socket分配一個端口號,這些端口號有特定的範圍限制。

echo “1024 40000” > /proc/sys/net/ipv4/ip_local_port_range

 

2、./configure腳本的選項


configure腳本的最終任務是創造Makefiles和其他文件;在有些情況下可能需要重新運行configure腳本,例如調整了內核參數,此時必須再次運行./configure以讓新的設置生效。在使用make命令重新編譯前,需要重運行configure腳本,這通常有兩種方法:一是使用如下命令:config.status --recheck;二是使用命令touch config.status,它更新了該文件的時間戳。注意,如果要增加或刪除./configure選項,則必須重新敲入完整的命令行。

configure的常用選項:

--prefix=PREFIX:Squid的安裝目錄,缺省值爲/usr/local;
--localstatedir=DIR:var目錄的安裝位置,缺省值爲$prefix/var;
--sysconfdir=DIR:etc目錄的安裝位置,缺省值爲$prefix/etc;
--enable-dlmalloc[=LIB]:將Squid源代碼包中的dlmalloc包編譯和鏈接進來;
--enable-gnuregex:如有必要,激活使用GNU正則表達式;
--enable-carp:Cache數組路由協議(CARP)用來轉發丟失的cache到父cache的數組或cluster;
--enable-async-io[=N_THREADS]:異步I/O可以用來提升存儲性能。aufs模塊使用大量的線程來執行磁盤I/O操作,N_THREADS參數改變Squid使用的線程數量。

--enable-async-io選項等同於如下三個選項:
--with-pthreads:在編譯過程中鏈接到系統的P線程庫,aufs存儲模塊是Squid中唯一需要使用線程的部分。
--with-aufs-threads=N_THREADS:指定aufs存儲機制使用的線程數量。Squid會根據cache目錄的數量,自動計算需要使用多少線程。
--enable-storeio=ufs,aufs,diskd, coss, null:告訴Squid編譯時使用哪個存儲模塊,源碼中/src/fs下面有所有可用的存儲模塊。ufs模塊是默認的,它也是最穩定的,但缺點是性能比較有限。

--enable-removal-policies=heap,lru:排除策略是Squid需要騰出空間給新的cache目標時,用以排除舊目標的機制。LRU(least recently used)爲默認值,它使用雙鏈表結構,GDS(greed dual size)和LFU(least frequently used)使用heap結構,注意,這種數據結構的實現並不是惟一的。
--enable-icmp:利用ICMP消息來確定迴環時間(round-trip time),這類似於ping程序;
--enable-delay-pools:延時池,用來限制帶寬。該池由大量的客戶端IP地址組成,當來自這些客戶端的請求發生cache miss時,它們的響應將被人爲的延遲。
--enable-usreagent-log:記錄來自客戶端請求消息中user-agent的HTTP消息頭;
--enable-referer-log:記錄來自客戶端請求消息中referer的HTTP消息頭;
--disable-wccp:Web cache協調協議(WCCP),用以攔截並分發HTTP請求到一個或多個caches。WCCP協議默認是激活的,該選項可用阻止編譯WCCP代碼。
--enable-snmp:在編譯過程中編譯所有的SNMP相關的代碼,包括一個裁切版本的CMU SNMP庫;
--enable-cachemgr -hostname[=hostname]:cachemgr是一個用來對Squid進行查詢管理的CGI程序,hostname默認值爲空。
--enable-arp-acl:支持ARP或者以太地址、訪問控制列表;
--enable-htcp:HTCP是超文本緩存協議,一種類似於ICP的內部緩存協議;
--enable-ssl:允許Squid終止SSL/TLS連接,僅對代理模式的加速請求有效;
--with-openssl[=DIR]:告訴Squid到哪裏找OpenSSL庫文件和頭文件;
--enable-cache-digests:Cache摘要是ICP的另一個可用的替代;

--enable-err-languages="lang1 lang2...":錯誤消息需要安裝的語言,相應的語言文件將複製到$prefix/share/errors中。如果不指定該選項,源包中所有可用的語言都會被安裝。

--enable-default-err-language=lang:錯誤消息採用的默認語言,英語是默認值。

--with-coss-membuf-size=N:該選項設置coss緩存目錄的內存緩衝大小,默認值是1MB。循環目標存儲系統(Cyclic Object Storage System, coss)是Squid的一種仍處於試驗性的存儲機制。
--enable-poll:強制使用poll()函數;
--desable-poll:不使用poll()函數;
--disable-http-violations:Squid默認是允許存在違反HTTP規範的配置,該選項可以完全禁止違背HTTP協議規範的代碼。
--enable-ipf-transparent:使用IP過濾器(filter)來輔助攔截緩存。
--enable-pf-transparent:在那些使用PF包過濾器的操作系統上使用HTTP攔截,PF是標準的數據包過濾器(packet filter)。
--enable-linux-netfilter:Netfilter是PF的名字,如果要在linux 2.4或以後的版本中使用HTTP攔截功能,那麼激活該選項。
--disable-ident-lookups:ident是一個簡單的協議,它允許服務器查找來自客戶端某條特定TCP連接的用戶名。
--disable-internal-dns:Squid源碼中包含了DNS兩種不同的實現,一個是內置的查找(採用Squid自身對DNS的實現),一個是外部查找(使用C庫gethostbyname()和gethostbyaddr()函數),默認使用前者。該選項將激活外部查找,並禁止內置的查找。
--enable-truncate:truncate()系統調用是unlink()的替代品。unlink完全刪除cache文件,而truncate將文件大小設爲零。有些人認爲這種收回磁盤空間但卻留下目錄項的方法可用改善性能。
--disable-hostname-checks:默認的,Squid要求URL主機名遵守古老的RFC 1034規範,使用該選項可以移除這種限制。
--enable-underscores:允許主機名裏包含下劃線,但仍須考慮DNS解析程序可能會禁止主機名裏包含下劃線。
--enable-auth=basic,digest,ntlm:設置HTTP驗證機制;

--enable-basic-auth-helpers=LIST:將helpers/basic_auth目錄的一個或多個HTTP Basic驗證輔助程序編譯進來;
--enable-ntlm-auth-helpers=LIST:將helpers/ntlm_auth目錄的一個或多個HTTP NTLM驗證輔助程序編譯進來;

--enable-ntlm-fail-open:允許在有錯誤時訪問NTLM驗證模塊。

--enable-digest-auth-modules=LIST:將helpers/digest_auth目錄的一個或多個HTTP Digest驗證輔助程序編譯進來;
--enable-external-acl-helpers=LIST:編譯一個或多個擴展ACL輔助程序;
--disable-unlinked:外部輔助進程,它對cache文件執行unlink()或truncate()系統調用;我們認爲通過在外部進程裏執行文件刪除工作,能給Squid帶來明顯的性能提升;
--enable-stacktrace:如果Squid崩潰,數據追蹤信息被寫到cache.log文件;
--enable-x-accelerator-vary:在Squid被配置成代理時使用。它建議Squid在響應請求時,從後臺原始服務器中尋找X-Accelerator-Vary頭。


3、Squid的目錄結構

libexec:輔助程序,通常由其它程序啓動;
libexec/unlinked:從cache目錄裏刪除文件;文件刪除是Squid一個性能瓶頸,通過外部進程執行刪除操作可以提升性能。
libexec/cachemgr.cgi:Squid管理功能的CGI接口,需要拷貝到WEB服務器的cgi-bin目錄;
libexec/diskd:如果指定了--enable-storeio=diskd時,該文件纔可見;
libexec/pinger:如果指定了--enable-icmp,該文件纔可見;
sbin:僅root可用的程序;
sbin/squid:squid的主程序;
bin:所有用戶都可用的程序;
bin/RunCache:啓動squid的腳本;
bin/RunAccel:與RunCache幾乎一致,但增加另一個命令行參數,告訴squid在哪裏偵聽HTTP請求。
bin/squidclient:用來測試Squid的HTTP客戶端程序;例如:squidclient -m GET http://www.baidu.com > tmp.html
etc:配置文件;
etc/squid.conf:主配置文件;
etc/squid.conf.default:默認配置文件;
etc/mime.conf:告訴Squid對從FTP和Gopher服務器獲取的數據使用何種MIME類型;
etc/mime.conf.default:默認mime文件;
share:通常包含只讀數據文件;
share/mib.txt:SNMP管理管理信息基礎(MIB)文件,SNMP客戶端軟件(如snmpget和MRTG)需要該文件;
share/icons:存放圖標;
share/errors:錯誤消息模板;
var:包含了不是很重要的和經常變化的文件,這些文件也無需備份;
var/logs:日誌文件;

          var/cache:緩存目錄;


4、Squid的命令行選項

運行$prefix/squid/sbin/squid主程序時,可以指定一些選項,例如:

-h:查看幫助信息。
-v:查看版本信息。
-a port:覆蓋squid.conf的http_port值(隻影響第一個)。
-u port:覆蓋squid.conf的icp_port值。
-d level:將調試消息寫入stderr中,level指定需要寫入stderr中的消息的最高級別,它遵循debug_options指令的設置。

-s:將cache.log消息記錄系統日誌/etc/syslog;僅僅在debug級別0和1的消息會被轉發,級別0的消息以syslog級別LOG_WARNING記錄,級別1的消息以syslog級別LOG_NOTICE記錄。所有消息使用LOCAL4的syslog設備。
-f file:指定一個可選的配置文件。
-z:初始化cache和swap目錄,首次運行Squid時或新增了一個cache目錄時都必須使用該選項。

-N:讓Squid在前臺終端運行,此時警告/錯誤消息將直接打印在屏幕上(stderr);

-D:啓動squid時不進行DNS初始化測試;

-X:進入完整調試模式,即debug_options ALL 9;

-k function:function可以是reconfigure, rotate, shutdown, interrupt, kill, debug, check, parse等。其中reconfigure可以讓正在運行的Squid程序重新加載配置文件;rotate讓日誌文件週期性滾動存儲;shutdown發送信號給Squid關閉進程;interrupt立即關閉Squid;kill發送強行關閉KILL信號給Squid(最終手段);debug將Squid轉爲完整調試模式;check檢查Squid進程的狀態;parse解析squid.conf文件,檢查配置是否正確。

例如:

squid -k debug; sleep 5; squid -k debug //獲得5秒的調試日誌信息


5、squid.conf的常用配置指令

==網絡參數配置==

http_port:Squid監聽客戶端HTTP請求的端口號,默認值爲3128;

https_port:Squid監聽客戶端HTTPS請求的端口號,默認值443。

 

==日誌和cache目錄==

cache_dir:cache_dir scheme directory size L1 L2,設置cache目錄的參數,如存儲機制(默認值爲ufs)和存放目錄(默認值爲$prefix/var/cache)等。

logformat:按照需要指定日誌在日誌文件存儲的格式;

access_log:指定access.log的存放目錄,默認值爲$prefix/var/logs。access.log主要記錄客戶端請求,如果不需要記錄,可以定義access_log /dev/null。

cache_log:指定cache.log的存放目錄,默認值爲$prefix/var/logs。cache.log主要記錄squid的調試消息等信息。

cache_store_log:指定store.log的存放目錄,默認值爲$prefix/var/logs。stroe.log記錄每一個進出cache的對象,如果不需要記錄,可以定義cache_store_log none。

debug_options:定義了squid功能模塊的日誌級別,一般使用默認值debug_options ALL 1;

 

==配置緩存大小的選項==

cache_mem:用於存放 In-Transit 對象(正在請求)、 Hot 對象(請求成功)和 Negative-Cached 對象(請求失敗),默認值是8M;

maximum_object_size_in_memory:超過這個值的對象不會緩存在內存中,默認值是8KB;

memory_replacement_policy:當內存cahce空間不足時,進行對象替換的策略,lru是默認值;

cache_replacement_policy:磁盤緩存替換策略,包括lru/gdsf/lfuda;lru是默認值;

minimum_object_size:低於這個值的對象不能被緩衝,默認值是0;

maximum_object_size:超過這個值的對象不能被緩衝,可以根據響應消息中的content-length頭來判斷對象大小;如果響應中沒有content-length頭,則先寫入磁盤,再檢查對象大小,默認值是4096KB。

cache_swap_low:當cache目錄的使用率(百分比)超過該值時,會開始刪除舊對象以保證使用率不會超過該值;所以,當squid運行穩定後,cache目錄的使用率比較接近該值。默認值是90;

cache_swap_high:默認值是95;


==調整緩存選項==

refresh_pattern:refresh_pattern -i regexp min percent max,間接控制磁盤緩衝,在cache命中率和確保數據的最新這兩個性能之間需要折衷。


quick_abort_min:如果客戶端中止請求,而資源的剩餘內容又小於16KB時,cache默認會繼續完成下載,quick_abort_min默認值爲16KB;

quick_abort_max:如果客戶端中止請求,而資源的剩餘內容又大於16KB時,cache默認會取消下載,quick_abort_max默認值爲16KB;

read_ahead_gap:發送到客戶端預取緩衝區的大小,默認值是17KB;

negative_ttl:定義了錯誤頁面(如“404 NOT FOUND”)的 Negative-Cached 緩存時間(time_to_live);

positive_dns_ttl:DNS查詢成功的生存時間,默認6小時;

negative_dns_ttl:對失敗的DNS查詢進行negative caching對象生存時間。;

range_offset_limit:

request_header_max_size:指定請求的HTTP頭的最大大小;

request_body_max_size:指定HTTP請求的body部分的最大值;

collapsed_forwarding:當有多個相同的URI回源時,合併成一個請求處理。

 

==訪問控制==

acl:定義訪問控制列表(access control list),格式:acl aclname sr/dest ip/mask。

http_access:過濾client請求;格式:http_access allow/deny aclname。

http_reply_access:過濾Server回覆;

icp_access:icp(Internet Cache Protocal)是sibling cache之間的通信協議,該指令用來配置cache與其臨近的其他cache之間的訪問控制機制。

reply_body_max_size:如果響應消息的消息體超過了該值,就立即刪除;

reply_header_max_size:響應消息中得實體不能超過該值;


==超時設置==

request_timeout:請求超時;

persistent_request_timeout:長連接中兩個請求的最大間隔時間;

connect_timeout:連接超時;

 

==其他項==

update_headers:在接收到304 Not Modified響應碼時,Squid默認會更新相關頭域,update_headers off 可以阻止這種特性;

via:關閉或開啓via頭,via頭用來記錄消息在傳輸過程中經過的中間結點(如gateway、proxy、router等);

header_access:header_access allow/deny header_name,允許或禁止訪問某個頭域;

header_replace:被header_access拒絕的頭域的內容可以使用header_replace進行替換(默認是移除);

deny_info:當請求被訪問規過濾掉時,squid會顯示一個錯誤的頁面,這個配置項可以定義那個錯誤的頁面。

forwarded_for:Squid是否記錄它轉發的請求中的hostname或IP地址,默認是打開的。例如X-Forwarded-For: 192.1.2.3;

reload_into_ims:將no-cache或reload請求轉變爲IMS請求(If-Modified-Since);

cachemgr_passwd:cache管理密碼;

cache_effective_user:設置運行Squid的有效賬戶;

cache_effective_group:設置有效用戶組;

visible_hostname:設置主機名;

 

==管理員參數配置==

cache_mgr:設置管理員郵箱,當Squid發生錯誤時將發送消息到指定郵箱,如cache_mgr [email protected]


==Cache_peer選項==

cache/no_cache:cache allow/deny alcname,不緩存指定的URL資源;

 

==外部支持方案的選項==

storeurl_rewrite_program:

storeurl_rewrite_children:

storeurl_rewrite_concurrency:

url_rewrite_program:

url_rewrite_children:

url_rewrite_concurrency:

url_rewrite_host_header:

 

==Delay pool 參數配置==

store_dir_select_algorithm:爲緩存對象選擇cache目錄的算法,有least-load和round-robin兩種,前者是選擇負荷最小的目錄,後者是輪詢所有未滿的目錄。

minimum_expiry_time:(Expires - Date),最小緩存時間;

vary_ignore_expire:

server_http11:在出口的請求中使用HTTP/1.1協議;

client_persistent_connections:客戶端是否支持長連接,默認是打開的;

server_persistent_connections:服務器端是否支持長連接,默認是打開的;

ignore_ims_on_miss:

coredump_dir:










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章