Squid 加速及反向代理與負載均衡php
/************************************************概念開始*********************************************************/
代 理服務器是使用很是廣泛的一種將局域網主機聯入互聯網的一種方式,使用代理上網能夠節約緊缺的IP地址資源,並且能夠阻斷外部主機對內部主機的訪問,使內 部網主機免受外部網主機的攻擊。可是,若是想讓互聯網上的主機訪問內部網的主機資源(例如:Web站點),又想使內部網主機免受外部網主機攻擊,通常的代 理服務是不能實現的,須要使用反向代理來實現。css
一.反向代理的概念html
什麼是反向代理呢?其實,反向代理也就是一般所說的WEB服務器加速,它是一種經過在繁忙的WEB服務器和Internet之間增長一個高速的WEB緩衝服務器(即:WEB反向代理服務器)來下降實際的WEB服務器的負載。典型的結構以下圖所示:前端
Web服務器加速(反向代理)是針對Web服務器提供加速功能的。它做爲代理Cache,但並不針對瀏覽器用戶,而針對一臺或多臺特定Web服務器(這也 是反向代理名稱的由來)。實施反向代理(如上圖所示),只要將Reverse Proxy Cache設備放置在一臺或多臺Web服務器前端便可。當互聯網用戶訪問某個WEB服務器時,經過DNS服務器解析後的IP地址是Reverse Proxy Server的IP地址,而非原始Web服務器的IP地址,這時Reverse Proxy Server設備充當Web服務器,瀏覽器能夠與它鏈接,無需再直接與Web服務器相連。所以,大量Web服務工做量被卸載到反向代理服務上。不但可以防 止外部網主機直接和web服務器直接通訊帶來的安全隱患,並且可以很大程度上減輕web服務器的負擔,提升訪問速度。web
二.反向代理和其它代理的比較windows
下面將對幾種典型的代理服務做一個簡單的比較。在網絡上常見的代理服務器有三種:瀏覽器
1. 標準的代理緩衝服務器 一個標準的代理緩衝服務被用於緩存靜態的網頁(例如:html文件和圖片文件等)到本地網絡上的一臺主機上(即代理服務器)。當被緩存的頁面被第二次 訪問的時候,瀏覽器將直接從本地代理服務器那裏獲取請求數據而再也不向原web站點請求數據。這樣就節省了寶貴的網絡帶寬,並且提升了訪問速度。可是,要想 實現這種方式,必須在每個內部主機的瀏覽器上明確指明代理服務器的IP地址和端口號。客戶端上網時,每次都把請求送給代理服務器處理,代理服務器根據請 求肯定是否鏈接到遠程web服務器獲取數據。若是在本地緩衝區有目標文件,則直接將文件傳給用戶便可。若是沒有的話則先取回文件,先在本地保存一份緩衝, 而後將文件發給客戶端瀏覽器。 2. 透明代理緩衝服務器 透明代理緩衝服務和標準代理服務器的功能徹底相同。可是,代理操做對客戶端的瀏覽器是透明的(即不需指明代理服務器的IP和端口)。透明代理服務器阻 斷網絡通訊,而且過濾出訪問外部的HTTP(80端口)流量。若是客戶端的請求在本地有緩衝則將緩衝的數據直接發給用戶,若是在本地沒有緩衝則向遠程web服務器發出請求,其他操做和標準的代理服務器徹底相同。對於Linux操做系統來講,透明代理使用Iptables或者Ipchains實現。由於 不須要對瀏覽器做任何設置,因此,透明代理對於ISP(Internet服務器提供商)特別有用。 3. 反向代理緩衝服務器 反向代理是和前兩種代理徹底不一樣的一種代理服務。使用它能夠下降原始WEB服務器的負載。反向代理服務器承擔了對原始WEB服務器的靜態頁面的請求, 防止原始服務器過載。它位於本地WEB服務器和Internet之間,處理全部對WEB服務器的請求,組織了WEB服務器和Internet的直接通訊。 若是互聯網用戶請求的頁面在代理服務器上有緩衝的話,代理服務器直接將緩衝內容發送給用戶。若是沒有緩衝則先向WEB服務器發出請求,取回數據,本地緩存 後再發送給用戶。這種方式經過下降了向WEB服務器的請求數從而下降了WEB服務器的負載。緩存
三.反向代理工做原理安全
反向代理服務器位於本地WEB服務器和Internet之間,以下圖所示:服務器
當用戶瀏覽器發出一個HTTP請求時,經過域名解析將請求定向到反向代理服務器(若是要實現多個WEB服務器的反向代理,須要將多個WEB服務器的域名 都指向反向代理服務器)。由反向代理服務器處理器請求。反向代理通常只緩存可緩衝的數據(好比html網頁和圖片等),而一些CGI腳本程序或者ASP之 類的程序不緩存。它根據從WEB服務器返回的HTTP頭標記來緩衝靜態頁面。有四個最重要HTTP頭標記:
Last-Modified: 告訴反向代理頁面什麼時間被修改
Expires: 告訴反向代理頁面什麼時間應該從緩衝區中刪除
Cache-Control: 告訴反向代理頁面是否應該被緩衝
Pragma: 告訴反向代理頁面是否應該被緩衝.
例如:在默認狀況下,ASP頁面返回」Cache-control: private.」,因此ASP頁面時不會在反向代理服務器緩存的。
/************************************************概念結束*********************************************************/
客戶端(192.168.2.166)訪問web服務器(192.168.0.164),在web服務器以前放置一臺squid緩存服務器(192.168.1.104),
web服務器上的域名解析都解析到squid緩存服務器上(也就是解析到這個IP192.168.1.104),
而後客戶端用訪問web的時候,根據域名解析,全部訪問都將直接到緩存服務器,
緩存服務器上再作轉發請求web服務器的內容,而後傳遞給用戶。
由於squid使用的接口是80,轉發給web服務器時web服務器也用80端口接收請求,
因此感受不到中間有個緩存服務器的存在,
可是正是因爲緩存服務器的存在,web服務器的負載下降,安全性提升了
用戶第一次訪問緩存服務器的時候,緩存服務器會向web請求內容
請求結束以後會保存一些靜態的文件在緩存服務器上,譬如圖片css js等
而動態的文件 相似php asp之類的都不被緩存,由於這個是實時更新的
下一個用戶訪問一樣的內容時,會直接從緩存服務器讀取緩存內容 這樣就讓用戶以爲速度很快
vi squid.conf
http_port 3128 accel(加速模式)vhost vport
###若這裏寫80之外的端口都要在代理機上作端口重定向,即未來自80端口的請求重定向到3128上##########
visible_hostname squid.abc.com(3.0之後比設)
cache_mgr
cache_mem 64 MB
cache_dir ufs /usr/local/squid_cache 4096 16 256
ufs(/var/spool/squid)最大緩存爲100 M 一級緩存目錄爲16個二級爲256個
#定義不一樣的父節點,將節點設爲no-query以及originserver說明這些節點是實際服務器
cache_peer 192.168.1.164 parent 80 0 no-query originserver name=test1 round-robin
cache_peer 192.168.1.238 parent 80 0 no-query originserver name=test2 round-robin
######如有兩臺squid或多臺服務器則只須要添加
cache_peer 192.168.129.21 sibling 80 3130 name=cache1
cache_peer 192.168.129.22 sibling 80 3130 name=cache2
#鏈接本地的與另外一臺Squid工做在sibling模式,實現數據的調取
cache_peer_domain test1 www.sun.com
cache_peer_domain test2 www.sun.com
error_directory /usr/local/squid/share/errors/Simplify_Chinese
emulate_httpd_log on
access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none
cache_peer_access test1 allow all
cache_peer_access test2 allow all
(設置訪問權限,容許全部外部客戶端訪問test1 test2 )
acl Manager proto cache_object
acl Localhost src 127.0.0.1/32
acl CONNECT method CONNECT
acl sun src 192.168.2.0/24
1.http_access allow Manager Localhost
2.http_access deny Manager(這兩行表示只容許Localhost,在寫容許與拒絕時最好按照格式位置寫)
….................
http_access allow sun
http_access deny All
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
icp_port 0
以上黑體爲最基本配置
在訪問的機子上要作DNS解析www.sun.com
注意:
192.168.2.166這個機器上 要將/etc/hosts(windows是這個文件c:/widows/system32/drivers/etc/hosts)里加入192.168.1.164www.abc.com同時在web機器上綁定www.abc.com這個域名
這樣直接輸入www.abc.com就能訪問到164緩存服務器了
用IP直接訪問164的話 會出現「您請求的網址(URL)沒法獲取」錯誤
#容許客戶端全部請求(這裏能夠設置攔截url,格式以下面兩行緩存設置)
http_access allow all
# 設置不緩存url類型(空格隔開
acl QUERY urlpath_regex .php .jsp .asp .pl .cgi
cache deny QUERY