squid反向代理

squid反向代理配置,做爲web服務器的前端內容緩存器。

本文在介紹 squid 反向代理的工做原理的基礎上,指出反向代理技術在提升網站訪問速度,加強網站可用性、安全性方面有很好的用途。做者在具體的實驗環境下,利用 DNS 輪詢和 Squid 反向代理技術,實現了網站的負載均衡,從而提升了網站的可用性和可靠性。
如今有許多大型的門戶網站如 SINA 都採用 squid 反向代理技術來加速網站的訪問速度,可將不一樣的 URL 請求分發到後臺不一樣的 WEB 服務器上,同時互聯網用戶只能看到反向代理服務器的地址,增強了網站的訪問安全。
反向代理的概念
反向代理服務器又稱爲 WEB 加速服務器,它位於WEB 服務器的前端,充當WEB 服務器的內容緩存器。其系統結構如圖 1

1. 系統結構
系統結構
反向代理服務器是針對 WEB 服務器設置的,後臺 WEB 服務器對互聯網用戶是透明的,用戶只能看到反向代理服務器的地址,不清楚後臺 WEB 服務器是如何組織架構的。當互聯網用戶請求 WEB 服務時,DNS 將請求的域名解析爲反向代理服務器的 IP 地址,這樣 URL 請求將被髮送到反向代理服務器,由反向代理服務器負責處理用戶的請求與應答、與後臺 WEB 服務器交互。利用反向代理服務器減輕了後臺 WEB 服務器的負載,提升了訪問速度,同時避免了因用戶直接與 WEB 服務器通訊帶來的安全隱患。
Squid
反向代理的實現原理
目前有許多反向代理軟件,比較有名的有 Nginx Squid Nginx 是由 Igor Sysoev 爲俄羅斯訪問量第二的 Rambler.ru 站點開發的,是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服務器。
Squid
是由美國政府大力資助的一項研究計劃,其目的爲解決網絡帶寬不足的問題,支持HTTPHTTPSFTP 等多種協議,是如今 Unix 系統上使用、最多功能也最完整的一套軟體。下面將重點介紹 Squid 反向代理的實現原理和在提升網站性能方面的應用。
Squid
反向代理服務器位於本地 WEB 服務器和 Internet 之間 , 組織架構如圖 2

2. 組織架構
組織架構
客戶端請求訪問 WEB 服務時,DNS 將訪問的域名解析爲 Squid 反向代理服務器的 IP 地址,這樣客戶端的 URL 請求將被髮送到反向代理服務器。若是 Squid 反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端,不然反向代理服務器將向後臺的 WEB 服務器請求資源,而後將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。
Squid
反向代理通常只緩存可緩衝的數據(好比 html 網頁和圖片等),而一些 CGI 腳本程序或者 ASPJSP 之類的動態程序默認不緩存。它根據從 WEB 服務器返回的 HTTP 頭標記來緩衝靜態頁面。有四個最重要 HTTP 頭標記:
Last-Modified:
告訴反向代理頁面什麼時間被修改
Expires:
告訴反向代理頁面什麼時間應該從緩衝區中刪除
Cache-Control:
告訴反向代理頁面是否應該被緩衝
Pragma:
用來包含實現特定的指令,最經常使用的是 Pragma:no-cache
利用 Squid 反向代理加速網站實例
本實例的域名是 wenjin.cache.xxx.com.cn,經過DNS的輪詢技術,將客戶端的請求分發給其中一臺 Squid 反向代理服務器處理,若是這臺 Squid 緩存了用戶的請求資源,則將請求的資源直接返回給用戶,不然這臺 Squid 將沒有緩存的請求根據配置的規則發送給鄰居 Squid 和後臺的 WEB 服務器處理,這樣既減輕後臺 WEB 服務器的負載,又提升整個網站的性能和安全性。該系統結構圖 3 以下:

3. 系統結構
系統結構
配置的系統環境:
一臺 DNS 服務器:操做系統 Freebsd,軟件 BIND 9.5IP 192.168.76.222
三臺 Squid 服務器:操做系統 Linux AS 4,軟件 Squid 3.0,相應的 IP 以下:
Squid1
192.168.76.223
Squid2
192.168.76.224
Squid3
192.168.76.225
三臺 WEB 服務器:操做系統 Linux AS 4,應用軟件 Tomcat 5.0+Mysql,相應的 IP 地址以下:
webServer1
210.82.118.195
webServer2
192.168.76.226
webServer1
192.168.76.227
應用軟件的安裝和配置
配置 DNS 服務器
軟件利用 Freebsd 自帶的 bind 9.5 。而後針對該系統配置 bind,首先修改 bind 的配置文件 /etc/namedb/named.conf,在文件中添加
複製代碼 代碼以下:zone "cache.xxx.com.cn"{
type master;
file "master/ cache.xxx.com.cn ";
};
再在 /etc/namedb/master 目錄下添加 cache.xxx.com.cn 文件,該文件的內容以下:
複製代碼 代碼以下:$TTL3600
@ IN SOA search. xxx.com.cn. root. xxx.com.cn. (
20080807; Serial
3600; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS search.xxx.com.cn.
1 IN PTR localhost.xxx.com.cn.
wenjin IN A 192.168.76.223
wenjin IN A 192.168.76.224
wenjin IN A 192.168.76.225
這樣當用戶請求的時候,DNS 經過輪詢機制將 wenjin.cache.xxx.com.cn 的域名解析爲 192.168.76.223192.168.76.224 192.168.76.225 其中之一。
配置完成後,運行 rndc star t 啓動 bind 服務。可在 /etc/rc.conf 中設置 named_enable="YES" 使得開機自啓動。
ps – A |grep named 查看 bind 服務是否起來;
nslookup wenjin.cache.xxx.com.cn 測試 bind 服務是否正常運行。
配置 Squid1 服務器
下載 squid-3.0.STABLE8.tar.gz 源碼包,將其放在 /home 目錄下
解壓縮tar – zxvf squid-3.0.STABLE8.tar.gz
設置配置參數:cd squid-3.0.STABLE10
./configure – prefix=/usr/local/squid
squid 安裝在 /usr/local 目錄下
編譯安裝:make&make install安裝完之後會在 /usr/local 目錄下看見 squid 目錄。
配置 squid 配置文件
編輯 squid.conf 文件,vi /usr/local/squid/etc/squid.conf
複製代碼 代碼以下: cache_effective_user squid
cache_effective_group squid
#########
設定 squid 的主機名 , 如無此項 squid 將沒法啓動
visible_hostname squid1.nlc.gov.cn
#############
配置 squid 爲加速模式 #################
http_port 80 accel vhost vport
icp_port 3130
#####
配置 squid2squid3 爲其鄰居,當 squid1 在其緩存中沒有找到請求的資源時,
經過 ICP 查詢去其鄰居中取得緩存
cache_peer squid2.xxx.com.cn sibling 80 3130
cache_peer squid3.xxx.com.cn sibling 80 3130
##### squid1
的三個父節點,originserver 參數指明是源服務器,
round-robin
參數指明 squid 經過輪詢方式將請求分發到其中一臺父節點;
squid
同時會對這些父節點的健康狀態進行檢查,若是父節點 down 了,
那麼 squid 會從剩餘的 origin 服務器中抓取數據
cache_peer 210.82.118.195 parent 8080 0 no-query originserver round-robin
name=webServer1
cache_peer 192.168.76.226 parent 8080 0 no-query originserver round-robin
name=webServer2
cache_peer 192.168.76.227 parent 8080 0 no-query originserver round-robin
name=webServer3
####
wenjin.cache.xxx.com.cn 域的請求經過 RR 輪詢方式轉發到三個父節點中的一個
cache_peer_domain webServer1 webServer2 webServer3 wenjin.cache.xxx.com.cn
#####
下面是一些訪問控制、日誌和緩存目錄的設置
acl localnet src 192.168.76.223 192.168.76.224 192.168.76.225
acl all src 0.0.0.0/0.0.0.0
http_access allow all
icp_access allow localnet
cache_log /usr/local/squid/var/logs/cache.log
access_log /usr/local/squid/var/logs/access.log squid
cache_dir ufs /usr/local/squid/var/cache/ 1000 16 256
#######
squid 的一些優化 ###############
maximum_object_size 10240 KB ###
能緩存的最大對象爲 10M
maximum_object_size_in_memory 512 KB ###
內存中緩存的最大對象 512K
cache_mem 256 MB ###squid
用於緩存的內存量保存後 :wq 退出。
/etc/hosts 文件中添加
複製代碼 代碼以下:192.168.76.223 squid1.xxx.com.cn
192.168.76.224 squid2.xxx.com.cn
192.168.76.225 squid3.xxx.com.cn
保存後 : wq 退出。
檢查 squid 配置文件正確與否:/usr/local/squid/bin/squid – k parse
生成緩存目錄/usr/local/squid/bin/squid – z
啓動squid/usr/local/squid/bin/squid
配置 squid2 squid3 服務器
squid2
squid3 服務器的配置方法和配置參數和 squid1 同樣,配置完成後,分別啓動這兩個服務器上的 squid 服務。
squid 的日誌文件 cache.log 中,出現以下日誌信息則說明三臺 squid 之間成功配置爲 sibling,且配置了三個父代理。
2008/11/17 10:08:47| Configuring Sibling squid1.xxx.com.cn/80/3130
2008/11/17 10:08:47| Configuring Sibling squid3.xxx.com.cn/80/3130
2008/11/17 10:08:47| Configuring Parent 210.82.118.195/8080/0
2008/11/17 10:08:47| Configuring Parent 192.168.76.226/8080/0
2008/11/17 10:08:47| Configuring Parent 192.168.76.227/8080/0
2008/11/17 10:08:47| Ready to serve requests.
測試
測試以前,保證 DNS 服務、三臺 squid 服務和三臺 web 服務都正常起來。在客戶端輸入http://wenjin.cache.xxx.com.cn,則正確的顯示該網頁。服務器端的響應對客戶端是透明的,客戶端不知道請求是由哪臺 WEB 服務器處理的;並且其中某臺 Squid 服務器或 WEB 服務器發生故障,也不影響服務的正常運行。
總結
Squid
是一個開源的軟件,利用它的反向代理技術能夠提升網站系統的訪問速度。本文在真實的網絡環境下,利用三臺 squid 反向代理服務器加速了網站的性能,同時結合 DNS 輪詢技術實現了網站的負載均衡。通過一段時間的測試和試運行,該網站的訪問速度和可用性方面都有很大的提升,從未出現過網站服務中斷狀況。

您可能感興趣的文章:
squid2.7
反向代理配置示例
linux
Squid反向代理搭建CDN緩存服務器的方法詳解
squid3
反向代理加速配置的例子
squid2.7
經過域名反向代理多個服務器的配置方法
squid3
安裝與反向代理配置一例
squid2.6
反向代理實驗模型
squid
反向代理服務器加速web
squid
反向代理配置(web服務器的前端內容緩存器)

html

相關文章
相關標籤/搜索