squid 學習筆記

來源:互聯網
上載者:User

標籤:des   style   http   os   使用   io   strong   檔案   for   

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:如有必要,啟用使用GNURegex;
--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:

squid 學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.