Windows下配置Squid反向代理服務器

 

Squid是一款類Unix系統下非常流行的服務器軟件,其最重要的功能就是在客戶端和服務端之間建立緩存。因而Squid可以用作反向代理,部署多級緩存或者搭建CDN等,無論名稱是什麼,本質上都是一樣的。目前Windows下也有Squid的移植版本,可以應對使用Windows環境的場景。這裏是下載地址文檔,如果需要了解Squid技術細節可以看看《Squid: The Definitive Guide》這本書的翻譯版本

一、安裝Squid

如果下載Binaries版本,直接解壓到c:\squid。這是軟件的默認安裝路徑,如果需要安裝到其他路徑下,則需要修改更多配置文件中關於路徑的配置項,另外安裝路徑不能有空格,官方建議配置文件中對於路徑的配置採用斜槓“/”代替“\”(由於類Unix系統使用“/”),即配置文件中對於路徑c:\squid應該寫成c:/squid。

接下來找到c:\squid\etc目錄,將cachemgr.conf.default,mime.conf.default,squid.conf.default三個文件複製改爲cachemgr.conf,mime.conf,squid.conf。這些是Squid配置文件,其中squid.conf則是基礎,後面的工作更多的是修改這個文件。

在cmd中使用命令c:\squid\sbin\squid -i -n ServerName(當然可以將c:\squid\sbin加入系統的環境變量,以免輸入那麼長的命令路徑)。其中“ServerName”可以自定義,如果名稱中包含空格,請用使用雙引號。例如:c:\squid\sbin\squid -i -n "Server Name"。在cmd中隨時可以使用c:\squid\sbin\squid -h 查看關於命令參數的幫助。

image

對於默認的配置文件,我們先命令net start SquidProxy啓動Squid看看(SquidProxy是在安裝Squid服務時起的名字,在services.msc中可以查看),但是會出現一些問題,服務無法啓動,這是可以通過c:\squid\sbin\squid.exe.log和c:\squid\var\cache.log日誌查看出現的問題。

一般情況下是c:\squid\var\cache目錄沒有建立,可以手工在目錄下建立;或者swap directories沒有建立,可以使用命令c:\squid\sbin\squid -z建立。這時服務可以正常啓動了。

image

 

二、配置Squid

接下里主要配置c:\squid\etc\squid.conf這個文件。強烈建議使用Notepad++等文本工具進行編輯(可以輕鬆高亮相同詞彙),以便減輕查找的配置項的難度。

配置之前需要明確需求並搭建滿足該需求的網絡環境,下面以配置Web反向代理服務器爲例討論Squid的配置:該反向代理服務器將作爲Web服務器的代理和緩存層,這裏假設外網地址爲222.0.0.0/24(客戶端訪問),內網地址爲172.16.0.0/24(用於Squid服務與Web站點之間或者Squid服務之間通信,這裏用Squid服務和Web站點的提法,而不是Squid服務器和Web服務器,原因是一臺服務器上可能有多個Squid服務或Web站點,我們假設一臺服務器上只有一個Squid服務或Web站點)。

考慮有以下幾種場景:

場景1:單站點代理,Squid服務A(222.0.0.10, 172.16.0.10)爲Web站點A(172.16.0.20)提供反向代理服務,這是最簡單的場景,squid.conf配置關鍵項可以簡單如下:

#建立一個名稱爲(all),客戶端地址(src)爲任意(all)的訪問控制列表(acl)。
acl all src all
#允許(allow)名稱爲(all)的控制列表訪問Squid服務
http_access allow all
#設置80端口爲Squid服務監聽客戶端訪問的端口
http_port 80
#建立一個名稱爲(abc)的緩存點,其上級(parent)爲Web站點A(172.16.0.20:80),該Web站點是源服務器(originserver)
cache_peer 172.16.0.20 parent 80 0 no-query originserver name=abc

場景2:多站點代理,Squid服務A(222.0.0.10, 172.16.0.10)爲Web站點A(172.16.0.20)和Web站點B(172.16.0.30)同時提供反向代理服務,假設Web站點A域名www.a.com和Web站點B域名www.b.com都指向222.0.0.10,squid.conf配置關鍵項如下:

#建立一個名稱爲(aclweba),服務端域名(dstdomain)爲(www.a.com)的訪問控制列表(acl)
acl aclweba dstdomain www.a.com
acl aclwebb dstdomain www.b.com
#允許(allow)名稱爲(aclweba)的訪問控制列表訪問
http_access allow aclweba 
http_access allow aclwebb 
#設置80端口爲Squid服務監聽客戶端訪問的端口,加速模式(vhost),將轉發主機頭至後端服務器
http_port 80 vhost
#建立一個名稱爲(weba)的緩存點,其上級(parent)爲Web站點A(172.16.0.20:80),該Web站點是據服務器(originserver) 
cache_peer 172.16.0.20 parent 80 0 no-query originserver name=weba
cache_peer 172.16.0.30 parent 80 0 no-query originserver name=webb
#將緩存點(weba)限制爲域名(www.a.com)訪問,即使用www.a.com才能訪問Web站點A,有點IIS中主機頭名的意思
cache_peer_domain weba www.a.com
cache_peer_domain webb www.b.com
#允許(allow)名稱爲(aclweba)的訪問控制列表訪問緩存點(weba)
cache_peer_access weba allow aclweba 
cache_peer_access webb allow aclwebb 
#設置緩存使用內存大小
cache_mem 1024 MB
#設置存儲路徑,存儲格式(ufs),總緩存大小(10240MB),一級緩存(16MB),二級緩存(253MB)
cache_dir ufs c:/squid/var/cache 10240 16 256

場景3:實現Web站點負載均衡,Squid服務A(222.0.0.10, 172.16.0.10)爲部署在不同服務器上的多個Web站點A:Web站點A1(172.16.0.20)和Web站點A2(172.16.0.30)提供反向代理服務,實現負載均衡,假設Web站點A域名www.a.com指向222.0.0.10,squid.conf配置關鍵項如下:

#建立一個名稱爲(aclweba),服務端域名(dstdomain)爲(www.a.com)的訪問控制列表(acl)
acl aclweba dstdomain www.a.com
#也可以建立允許所有人訪問的訪問控制列表(acl),可以建立針對諸如來源IP(src)、目的IP(dst)、目的域名(dstdomain)等的訪問控制列表。
#acl aclweba src all
#允許(allow)名稱爲(aclweba)的訪問控制列表訪問 http_access allow aclweba
#設置80端口爲Squid服務監聽客戶端訪問的端口,加速模式(vhost),將轉發主機頭至後端服務器
http_port 80 vhost
#建立名稱分別爲(weba1、weba2)的緩存點,通過輪詢(round-robin)訪問其上級(parent)Web站點A1(172.16.0.20:80)或Web站點A2(172.16.0.20:80),這些Web站點是源服務器(originserver) 
cache_peer 172.16.0.20 parent 80 0 no-query originserver round-robin name=weba1
cache_peer 172.16.0.30 parent 80 0 no-query originserver round-robin name=weba2
#設置緩存使用內存大小
cache_mem 1024 MB
#設置存儲路徑,存儲格式(ufs),總緩存大小(10240MB),一級緩存(16MB),二級緩存(253MB)
cache_dir ufs c:/squid/var/cache 10240 16 256

場景4:在場景3的基礎上增加Squid服務A2(222.0.0.11, 172.16.0.11),與Squid服務A實現負載均衡(簡單的可以通過DNS輪詢機制),兩個Squid服務配置基本一致,還需在配置中各增加Squid服務A和Squid服務A2互爲鄰居,並開放相關端口。

#建立一個名稱爲(aclweba),服務端域名(dstdomain)爲(www.a.com)的訪問控制列表(acl)
acl aclweba dstdomain www.a.com
#也可以建立允許所有人訪問的訪問控制列表(acl),可以建立針對諸如來源IP(src)、目的IP(dst)、目的域名(dstdomain)等的訪問控制列表。
#acl aclweba src all
#建立一個名稱爲(localnet),來源IP爲(172.16.0.0/24)的訪問控制列表(acl),供內部通信
acl localnet src 172.16.0.0/24
#允許(allow)名稱爲(aclweba)的訪問控制列表http訪問
http_access allow aclweba
#允許(allow)名稱爲(localnet)的訪問控制列表icp訪問
icp_access allow localnet
#設置80端口爲Squid服務監聽客戶端訪問的端口,加速模式(vhost),將轉發主機頭至後端服務器
http_port 80 vhost
#設置3130爲Squid服務器將的通訊端口
icp_port 3130
#Squid服務互爲鄰居,通過ICP查詢其他Squid服務中自己沒有的緩存
cache_peer 172.16.0.10 sibling 80 3130
cache_peer 172.16.0.11 sibling 80 3130
#建立名稱分別爲(weba1、weba2)的緩存點,通過輪詢(round-robin)訪問其上級(parent)Web站點A1(172.16.0.20:80)或Web站點A2(172.16.0.20:80),這些Web站點是源服務器(originserver)
cache_peer 172.16.0.20 parent 80 0 no-query originserver round-robin name=weba1
cache_peer
172.16.0.30 parent 80 0 no-query originserver round-robin name=weba2
#設置緩存使用內存大小
cache_mem
1024 MB
#設置存儲路徑,存儲格式(ufs),總緩存大小(10240MB),一級緩存(16MB),二級緩存(253MB)
cache_dir ufs c:/squid/var/cache 10240 16 256

每次修改完配置無需重啓服務,使用命令 c:\squid\sbin\squid -k reconfigure -n SquidProxy使服務生效。

要強行卸載服務可以net stop SquidProxy停止服務後sc delete SquidProxy卸載。

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