1. 程式人生 > >Squid代理配置

Squid代理配置

主機名 不能 url denied 需要 fresh 空格 ppr 編譯

1、更改錯誤頁面時間不對的問題,解壓源碼包,進入此路徑/usr/local/squid/share/errors/zh-cn(需要更改該目錄下的所有文件find -type f |xargs sed -i ‘s#%T#%t#g‘),編輯ERR_ACCESS_DENIED文件

技術分享圖片

[root@web01 ~]# vim /usr/local/squid/etc/squid.conf #在該文件裏追加下面一行
cache_mgr [email protected] #更改錯誤頁面上管理員通知郵箱地址

/usr/local/squid/sbin/squid -z #初始化緩存空間
/usr/local/squid/sbin/squid #啟動squid
/usr/local/squid/sbin/squid -k shutdown #停止squid
/usr/local/squid/sbin/squid -k reconfigure #重新載入配置文件
/usr/local/squid/sbin/squid -k rotate #輪循日誌
/usr/local/squid/sbin/squid -k parse #檢查語法

ACL元素,語法定義規則:
acl aclname Acl_Type “string”|“file”
Acl_Type為關鍵字,可以是(src、dst、proto、port、srcdomain、dstdomain、url_regex、urlpath_regex、maxconn、method、time)

Acl_Type 說明
src 源地址
dst 目的地址
proto 協議
port 端口號
srcdomain 客戶端域名
dstdomain 服務器域名
url_regex URL規則表達式匹配
Urlpath_regex:URL-path 略去協議和主機名的URL規則表達式匹配
Proxy_auth 通過外部程序進行用戶認證
maxconn 單個IP最大連接數
method 指定HTTP請求方法
time 匹配時間,語法:[星期][時間段]
星期:使用關鍵字M,T,W,H,F,A,S(關鍵字順序依次為星期一,二,三,四,五,六,日)
時間段:可以表示為10:00-20:00
實例:
(1) src:源地址。定義如下:
acl aclname src 10.47.39.0/24 #網絡地址
acl:aclname src 10.47.39.16-10.47.39.17/32 #地址範圍
(2)dst:目標地址
acl aclname dst 123.127.155.162/32
(3)srcdomain:客戶所屬的域
acl aclname srcdomain foo.com
(4)dstdomain:請求服務器所屬的域
acl aclname dstdomain baidu.com
(5)time:訪問時間
acl aclname time [day-abbrevs] [h1:m1-h2:m2]-[hh:mm-hh:mm]
M:指代Monday;T:指代Tuesday;W:指代Wednesday;H:指代Thursday;F:指代Friday;A:指代Saturday;S:指代Sunday
(6)port:訪問端口。可以指定多個端口
acl aclname port 80 70 21
acl aclname port 0-1024 #指定一個端口範圍
(7)proto:使用協議
acl aclname proto HTTP FTP
(8)method:請求方法
acl aclname method GET POST
(9)url_regex:URL規則表達式匹配
acl aclname url_regex[-i] pattern
(10)urlpath_regex:URL-path規則表達式匹配
acl aclname urlpath_regex[-i] pattern

[root@web01 ~]# cat /usr/local/squid/etc/squid.conf #主配置文件
include /usr/local/squid/etc/conf.d/client_ip.conf
include /usr/local/squid/etc/conf.d/dst_ip.conf
include /usr/local/squid/etc/conf.d/port.conf
include /usr/local/squid/etc/conf.d/domain.conf
include /usr/local/squid/etc/conf.d/http_access.conf
http_access deny all
http_port 10.47.39.8:3128
coredump_dir /usr/local/squid/var/cache/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
cache_mgr [email protected]
httpd_suppress_version_string on
visible_hostname proxy.test.com
[root@web01 ~]# cat /usr/local/squid/etc/conf.d/client_ip.conf
acl LocalNet src 172.16.0.0/12 # RFC1918 possible internal network
acl Host src 10.47.39.16/32
acl Conn maxconn 5
[root@web01 ~]# cat /usr/local/squid/etc/conf.d/dst_ip.conf
acl Dst_IP dst 10.47.39.7/32
[root@web01 ~]# cat /usr/local/squid/etc/conf.d/port.conf
acl Dst_Port port 80
[root@web01 ~]# cat /usr/local/squid/etc/conf.d/domain.conf
acl DOMAIN dstdomain www.baidu.com
[root@web01 ~]# cat /usr/local/squid/etc/conf.d/http_access.conf #調用ACL
http_access allow LocalNet DOMAIN
http_access allow Host DOMAIN

Squid服務啟動腳本:
[root@web01 ~]# cat /etc/init.d/squid
#!/bin/bash
#squid server script
#2017-10-20
source /etc/init.d/functions
DirPath=/usr/local/squid
function start() {
if [[ ! -f "$DirPath/var/run/squid.pid" ]];then
$DirPath/sbin/squid
sleep 2
action "Start Squid" /bin/true
else
action "Squid already running!!!" /bin/false
exit 1
fi
}
function stop() {
if [[ -f "$DirPath/var/run/squid.pid" ]];then
$DirPath/sbin/squid -k shutdown
printf "Stopping Squid"
while [[ -f "$DirPath/var/run/squid.pid" ]];do printf ".";usleep 800000;done
echo " "
action "Already Stop Squid" /bin/true
else
action "Squid not run" /bin/false
exit 2
fi
}
function reload() {
if [[ -f "$DirPath/var/run/squid.pid" ]];then
$DirPath/sbin/squid -k reconfigure
sleep 2
action "Reload Squid Configure" /bin/true
else
action "Squid not run" /bin/false
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|reload|restart}"
esac

squid日誌分析
#cat access.log|gawk ‘{print $4}‘|sort|uniq -c|sort -nr
9568 TCP_IMS_HIT/304
6313 TCP_HIT/200
2133 TCP_MISS/200
1568 TCP_MISS/206
587 TCP_MEM_HIT/200
531 TCP_MISS/304
207 TCP_REFRESH_HIT/200
152 TCP_REFRESH_HIT/304
86 TCP_NEGATIVE_HIT/404
69 TCP_MISS/404
9 TCP_MISS/000
4 TCP_MISS/503
1 TCP_REFRESH_MISS/000
1 TCP_DENIED/400

#cat /var/log/squid/access.log |grep TCP_MEM_HIT
如果看到很多的TCP_MEM_HIT ,這表明該文件是從內存緩存讀取的,squid已經起作用了!你再用瀏覽器打開該文件,應該是快如閃電了..呵呵,大功告成了!還有其他類型的HIT,如TCP_HIT等等,這些是從磁盤讀取的,我覺得加速的意義不大,只不過緩解了apache的壓力而已.
相應於HTTP請求,下列標簽可能出現在access.log文件的第四個域.
TCP_HIT
Squid發現請求資源的貌似新鮮的拷貝,並將其立即發送到客戶端.
TCP_MISS
Squid沒有請求資源的cache拷貝.
TCP_REFERSH_HIT
Squid發現請求資源的貌似陳舊的拷貝,並發送確認請求到原始服務器.原始服務器返回304(未修改)響應,指示squid的拷貝仍舊是新鮮的.
TCP_REF_FAIL_HIT
Squid發現請求資源的貌似陳舊的拷貝,並發送確認請求到原始服務器.然而,原始服務器響應失敗,或者返回的響應Squid不能理解.在此情形下,squid發送現有cache拷貝(很可能是陳舊的)到客戶端.
TCP_REFRESH_MISS
Squid發現請求資源的貌似陳舊的拷貝,並發送確認請求到原始服務器.原始服務器響應新的內容,指示這個cache拷貝確實是陳舊的.
TCP_CLIENT_REFRESH_MISS
Squid發現了請求資源的拷貝,但客戶端的請求包含了Cache-Control: no-cache指令.Squid轉發客戶端的請求到原始服務器,強迫cache確認.
TCP_IMS_HIT
客戶端發送確認請求,Squid發現更近來的、貌似新鮮的請求資源的拷貝.Squid發送更新的內容到客戶端,而不聯系原始服務器.
TCP_SWAPFAIL_MISS
Squid發現請求資源的有效拷貝,但從磁盤裝載它失敗.這時squid發送請求到原始服務器,就如同這是個cache丟失一樣.
TCP_NEGATIVE_HIT
在對原始服務器的請求導致HTTP錯誤時,Squid也會cache這個響應.在短時間內對這些資源的重復請求,導致了否命中. negative_ttl指令控制這些錯誤被cache的時間數量.請註意這些錯誤只在內存cache,不會寫往磁盤.下列HTTP狀態碼可能導致否定 cache(也遵循於其他約束): 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504.
TCP_MEM_HIT
Squid在內存cache裏發現請求資源的有效拷貝,並將其立即發送到客戶端.註意這點並非精確的呈現了所有從內存服務的響應.例如,某些cache在內存裏,但要求確認的響應,會以TCP_REFRESH_HIT, TCP_REFRESH_MISS等形式記錄.
TCP_DENIED
因為http_access或http_reply_access規則,客戶端的請求被拒絕了.註意被http_access拒絕的請求在第9域的值是NONE/-,然而被http_reply_access拒絕的請求,在相應地方有一個有效值.
TCP_OFFLINE_HIT
當offline_mode激活時,Squid對任何cache響應返回cache命中,而不用考慮它的新鮮程度.
TCP_REDIRECT
重定向程序告訴Squid產生一個HTTP重定向到新的URI(見11.1節).正常的,Squid不會記錄這些重定向.假如要這樣做,必須在編譯squid前,手工定義LOG_TCP_REDIRECTS預處理指令.
NONE
無分類的結果用於特定錯誤,例如無效主機名.
相應於ICP查詢,下列標簽可能出現在access.log文件的第四域.
UDP_HIT
Squid在cache裏發現請求資源的貌似新鮮的拷貝.
UDP_MISS
Squid沒有在cache裏發現請求資源的貌似新鮮的拷貝.假如同一目標通過HTTP請求,就可能是個cache丟失.請對比UDP_MISS_NOFETCH.
UDP_MISS_NOFETCH
跟UDP_MISS類似,不同的是這裏也指示了Squid不願去處理相應的HTTP請求.假如使用了-Y命令行選項,Squid在啟動並編譯其內存索引時,會返回這個標簽而不是UDP_MISS.
UDP_DENIED
因為icp_access規則,ICP查詢被拒絕.假如超過95%的到某客戶端的ICP響應是UDP_DENIED,並且客戶端數據庫激活了(見附錄A),Squid在1小時內,停止發送任何ICP響應到該客戶端.若這點發生,你也可在cache.log裏見到一個警告.
UDP_INVALID
Squid接受到無效查詢(例如截斷的消息、無效協議版本、URI裏的空格等).Squid發送UDP_INVALID響應到客戶端.
http://blog.csdn.net/alonesword/article/details/18521449 #squid日誌詳解

curl -i -k -x http://172.20.6.88:3128 https://www.baidu.com
http://www.cnblogs.com/duhuo/p/5695256.html #curl命令詳解

http://www.visolve.com/squid/squid24s1/access_controls.php
http://weihaoxuan.blog.51cto.com/8698172/1419990 #squid代理
http://www.360doc.com/content/13/0418/19/2633_279279885.shtml

Squid代理配置