參考網址:A夢之IT可憐貓
Proxy Server 的分流程式( proxy.pac)
一、前言
如果你的對proxy server log 檔做流量分析,結果排行榜的前幾名都是自己學校的網站,那網路的流量就有點浪費了;如果貴單位必須設上層的 Proxy Server ,那影響更大了,因為資料都由上層 Proxy Server 送來,即使瀏覽的是LOCAL 網站,快則由 local 的 proxy server 送來,慢則由上層 server 先到local 抓取,再送過來,等於是繞了一圈。
Squid 1.X 版時,有設定 local IP 和 local domain 的功能,2.X 版也有類似的設定,但一直試不出不抓網域內 網站的設定,所以、得靠分流程式;在一般較大的單位中,Proxy server 不只一台,這也得靠 分流程式的設定;總之,要發揮proxy server 的效能與有效控管,分流程式是最佳選擇。
二、環境設定
-
分流程式是由JavaScript Function 組成,預設的副檔名是 .pac ,一般都是用 proxy.pac 這個名字,它必需獨立,不能包含在 HTML 中,格式如下
function FindProxyForURL(url, host)
{
……..
……..
} -
proxy.pac 要放在那裡呢? 你可以把它當成網頁,放在 web server 上,讓瀏覽器讀取。 例如我們把設定檔存成 proxy.pac,然後放在 一台執行 Apache 的 WEB SERVER (www.cses.tcc.edu.tw) 的首頁目錄,那麼我們在瀏覽器的設定就是:
http://www.cses.tcc.edu.tw/proxy.pac
也許你會產生疑問,proxy.pac 和 proxy server 不用在同一台電腦上嗎? 那誰又規定跑 squid 的 proxy server 也要執行 apache 。 ^_^
那些 web server 支援呢? Netscape 、Apache、CERN、NCSA都可以,以Apache 為例,請檢查 httpd.conf 中是否有以下的設定,如果沒有就自己加上去吧!
Addtype application/x-ns-proxy-autoconfig .pac
三、範例說明
一個一個function 來說明太麻煩了,就直接用例子來說明好了。
範例一:基本簡單型
function FindProxyForURL(url, host) { if (isPlainHostName(host) || dnsDomainIs(host, ".cses.tcc.edu.tw")) return "DIRECT"; else return "PROXY proxy.cses.tcc.edu.tw:3128; DIRECT"; } |
說明:以我學校為例,在Browser 的 URL 欄位打 www 就會連到 www.cses.tcc.edu.tw ,第一個 isPlainHostName(host) 就是處理這個部份,第二個部份 dnsDomainIs(host, ".cses.tcc.edu.tw") 就是處理 linux.cses.tcc.edu.tw 這種網址,這些網域都是 local 的網站,所以回應 DIRECT ,直接去抓就可以了。
如果不符以上情形,那就是透過 proxy.cses.tcc.edu.tw:3128 去抓資料,後面加上 DIRECT 是怕 PROXY 當了,也可以直接抓取。
範例二:多了 IP 的判斷
function FindProxyForURL(url, host) |
說明:這一個例子只是比上例多一個檢查 IP 的動作,只要是連往 163.17.208.x/24 也都直接存取。
範例三:LOCAL 、特殊網站、其他三種情形
function FindProxyForURL(url, host)
if (dnsDomainIs(host, ".edu.tw")) |
說明:因為 CODERED 的關係,中興大學對 80 PORT 的流量做管制,必需經過 proxy server ,所以,所有的教育網站都經過 proxy server ,興大提供 cache1 cache2 兩台 server ,是 edu.tw 的網站都要透過特定的 巨server , 要注意的是兩台 PROXy SERVER 的寫法。
我的設定:
function FindProxyForURL(url, host) {
# 自己學校的網域、IP 、縣網、縣網 IP 還有電子公文 |
四、後記
小程式我會寫,但是JavaScript沒碰過,如果怕語法有錯,推薦一套編輯器 http://www.editplus.com/ 管它什麼 HTML, ASP, PHP, Perl, VBScript, JavaScript, CSS files, C/C++, Java, JSP, SQL, Pascal, Python 通通支援,只要下載它的 語法檔或控制檔,檔案都小的,不過它沒有 巨集的功能。