茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671191 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
F09_390.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2016/3/3 9:54:39

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 的效能與有效控管,分流程式是最佳選擇。

二、環境設定

  1. 分流程式是由JavaScript Function 組成,預設的副檔名是 .pac ,一般都是用 proxy.pac 這個名字,它必需獨立,不能包含在 HTML 中,格式如下
    function FindProxyForURL(url, host)
    {
        ........
        ........
    }


  2. 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 當了,也可以直接抓取。

註:也許會覺得奇怪,PROXY 當了,就讀不到這個proxy.pac 了,那設定有用嗎?  沒有人規定proxy.pac 要放在 proxy server 上,不同的 server 是可以的,只要 web server 支援。
 

範例二:多了 IP 的判斷

function FindProxyForURL(url, host)
    {
        if (isPlainHostName(host) ||

            dnsDomainIs(host, ".cses.tcc.edu.tw") ||
          isInNet(host, "163.17.208.0", "255.255.255.0"))
            return "DIRECT";
        else
            return "PROXY proxy.cses.tcc.edu.tw:3128; DIRECT";
    }

說明:這一個例子只是比上例多一個檢查 IP 的動作,只要是連往 163.17.208.x/24 也都直接存取。

範例三:LOCAL 、特殊網站、其他三種情形

function FindProxyForURL(url, host)
    {

        if (isPlainHostName(host) ||
            dnsDomainIs(host, ".cses.tcc.edu.tw") ||
          isInNet(host, "163.17.208.0", "255.255.255.0"))
        return "DIRECT";
        

        if (dnsDomainIs(host, ".edu.tw"))
      return "PROXY cache2.nchu.edu.tw:3128;" +  
                "PROXY cache1.nchu.edu.tw:3128";
        else

       return "PROXY proxy.cses.tcc.edu.tw:3128";
    }

說明:因為 CODERED 的關係,中興大學對 80 PORT 的流量做管制,必需經過 proxy server ,所以,所有的教育網站都經過 proxy server ,興大提供 cache1 cache2 兩台 server ,是 edu.tw 的網站都要透過特定的 巨server , 要注意的是兩台 PROXy SERVER 的寫法。

我的設定:
function FindProxyForURL(url, host)
    { # 自己學校的網域、IP 、縣網、縣網 IP 還有電子公文
# 的專屬網站都直接存取,不經過 PROXY SERVER 

          if (isPlainHostName(host) ||
          dnsDomainIs(host, ".cses.tcc.edu.tw") ||

            dnsDomainIs(host, ".boe.tcc.edu.tw") ||
             localHostOrDomainIs(host, "eod.taichung.gov.tw") ||
          isInNet(host, "163.17.208.0", "255.255.255.0") ||
          isInNet(host, "163.17.40.0", "255.255.255.0"))
       return "DIRECT";
# 到 台中縣的中、小學都經過 PROXY,不然又繞到中興就太
# 慢了,也可以把上面的 boe 去掉,那就是直接存取,
# 但是我覺得,國中、小的頻寬都不高,還是經過 PROXY 
# 比較好。

         if (dnsDomainIs(host, ".tcc.edu.tw"))

                return "PROXY proxy.cses.tcc.edu.tw:3128";
# 經過上面的過濾, 其他的教育單位就經由中興大學了。
         if (dnsDomainIs(host, ".edu.tw"))
         return "PROXY cache2.nchu.edu.tw:3128;" + 
                "PROXY cache1.nchu.edu.tw:3128";
       else
# 如果都不是、那就由本校的 proxy 出去了。
             return "PROXY proxy.cses.tcc.edu.tw:3128";
     }

四、後記


小程式我會寫,但是JavaScript沒碰過,如果怕語法有錯,推薦一套編輯器 http://www.editplus.com/  管它什麼  HTML, ASP, PHP, Perl, VBScript, JavaScript, CSS files,  C/C++, Java, JSP, SQL, Pascal, Python 通通支援,只要下載它的 語法檔或控制檔,檔案都小的,不過它沒有 巨集的功能。

參考資料


原文出處:Proxy Server 的分流程式
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|