Discuz!NT靜態文件緩存(SQUID)解決方案

       在目前最新版本的產品中,咱們提供了緩存靜態文件的解決方案,就是使用SQUID作靜態前端,將論壇中的大部分靜態文件佈署或外鏈到一個新的HTTP連接 上,其中能夠外鏈的靜態文件包括:     javascript

 

     1.Discuz.web/Javascript/ 下全部以‘template_’打頭的JS文件以及該文件夾下的部分js文件。
     2. 模版文件夾下的全部CSS或IMAGE文件(空間相冊文件夾除外)
     3.前臺Image文件夾下的Medal(勳 章),Topicidentify(主題鑑定圖標)下的全部文件。

 

       同時在最新的產品中,咱們新增了一個entlib.config文 件(位於discuz.web\config\文件夾下),用於配置全部與Discuz!NT企業版相關的配置信息,上面所說的HTTP外鏈地址,就在這 個文件中有相應配置,咱們只要編輯其中的相應節點信息,就能夠啓用這個功能了,好比下面的這個配置:css

 

<? xml version="1.0" ?>
< EntLibConfigInfo  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd ="http://www.w3.org/2001/XMLSchema" >
 
< Medaldir > http://10.0.8.12:81/myp_w_picpath/medals/ </ Medaldir >   <!-- 勳章 -->
 
< Topicidentifydir > http://10.0.8.12:81/myp_w_picpath/identify/ </ Topicidentifydir >   <!-- 主題鑑定圖標 -->  
    
< Jsdir > http://10.0.8.12:81/javascript/ </ Jsdir >    <!-- javascript/目錄下的 js路徑勳章 -->
</ EntLibConfigInfo >

  

       經過上面的文件配置,就能夠將前面所說的1和3這兩大類靜態文件的外鏈指到別的地址上了。固然若是要設置模板文件夾下的那些CSS,IMAGE文件,咱們 還要在管理後臺中的模板列表中進行相關設置。這裏爲了方便起見,我直接在數據庫中的dnt_templates表(默認)將相應的模板靜態文件外鏈信息直 接寫上,以下圖:
   html

            

 

      咱們的產品目前能夠支持爲不一樣的模板設置不一樣的靜態文件外鏈地址,如上圖。 前端

      這樣,當咱們設置完成上面的內容以後,就能夠在IE頁面源碼中看到當前的靜態文件已被連接新的地址上去了,以下圖(showforum.aspx頁):java


      

 

        固然,目前完成了程序的開發和配置,下面着重介紹以下若是配置SQUID,以架構啓用靜態前端服務。web

 

       目前在SQUID上有兩個平臺版本,分別是LINUX和WINDOWS,咱們的產品支持這個平臺上的SQUID程序。這裏爲了方便佈署,只介紹 WINDOW平臺上的安裝步聚(網上LINUX下安裝SQUID的資料很是豐富)。算法

 

       首先,從下面地址上下載相應的SQUID windows版本到本地。數據庫

       http://squid.acmeconsulting.it/windows

 

       而後將解壓該文件到C盤目錄下,在squid\etc目錄下把:    瀏覽器

    1.squid.conf.default 拷貝一份從新命名爲squid.conf 
    2.cachemgr.conf.default拷貝一份從新命名爲 cachemgr.conf 
    3.mime.conf.default拷貝一份從新命名爲mime.conf 

  

      接着配置squid.conf,設置相關節點。下面作一下介紹:     

   #啓用當前主機的81端口爲 squid服務端口
    http_port 81 vhost 


   #瀏覽器上顯示的主機名稱
    visible_hostname cache.discuznt

 

      由於squid支持集羣佈署,因此它提供了相應的配置節點,即cache_peer,詳細說明參 見該連接。 這裏我把佈署環境作一下說明,在本部門的服務器環境中,單拿出兩臺機器互相作爲sibling(姊妹)鄰居。    
   

  SQUID運做模式:
    1. 當Squid Server 沒有資料 時,會先向Sibling 的Squid Server 要資料,若是Sibling沒資料,就跳過它直接向Parent 要。
    2. 向 Parent 要資料,然後一直等,直到Parent 給它資料爲止(Parent 本身有的資料或上Internet 去拿)。
    3. 沒 有Parent 時,就本身上Internet 去get。
    4. 若是這三者都拿不到資料,才向用戶端回報拿不到資料。

  

      這裏我將相應的產品靜態文件佈署到10.0.8.12機器上,並配置了一個端口爲7001的IIS站點(注:實際環境下能夠省略這一步,將squid緩 存的站點信息配置到其squid.conf文件中)。這樣,其結點信息以下所示:    

    #配置緩存節點
    cache_peer 10.0.8.12 parent  7001 0 no-query no-digest originserver name=a
    #10.0.8.13 爲(姊妹)鄰居
    cache_peer 10.0.8.13 sibling 81 3130 proxy-only name=b

 

       一樣將上面的設置複製到10.0.8.14這臺機器上的81端口上運行的squid的相應節點。   
 
       下面接着介紹10.0.8.12上的squid.conf配置信息    
   

    hierarchy_stoplist cgi-bin ? \.aspx \.html
    acl QUERY urlpath_regex cgi-bin \? \.aspx \.html   
    cache deny QUERY
    via on

 

     上面的配置信息說明:
     Squid內在的將每一個客戶端請求標記爲層疊或不可層疊。不可層疊的請求看起來不會致使cache命中。例如,POST請求的響應幾乎從不會被 cache。在squid能簡單的鏈接到原始服務器時,轉發不可cache目標的請求到鄰居cache,純粹是浪費資源。某些區分層疊和不可層疊請求的規 則,在squid裏難於編碼。例如,POST和PUT方式老是不可層疊的。然而,hierarchy_stoplist指令容許你定製這種算法。它包含一 個字符串列表,當在URI裏發現它們時,squid將請求標記爲不可層疊。默認的該列表是:
      hierarchy_stoplist ? cgi-bin這樣,任何包含問號或cgi-bin字符串的請求匹配該列表,變成不可層疊。
      默認的,squid直接發送不可層疊的請求到原始服務器。

      能夠把其理解爲對指定擴展名和連接串用包括特定字符的請求不予緩存和查詢。即aspx.html這類請求頁面直接轉發到原始服務器 (originserver )。

 

      下面註釋的信息曾用於在生產環境下進行配置    

    #cache_peer_domain a parent ***.com http://www.***.com/ bbs.***.com home.***.com pma.***.com
    #cache_peer_domain b parent .com .net .org .cc .tv .cn .biz .name

  
     注:cache_peer_domain指令是cache_peer_access指令的早期形式。相對於使用完整的訪問控制特性,它僅使用URI裏的域 名。它經常使用於經過域名區分一組父cache。例如,假如你有一個遍及全球的內部網,你也許想發送請求到位於各自大陸的cache:

    

    #設定不一樣域名轉發到不一樣的 cache_peer上,若是沒有這項.不一樣的域名請求可能被分發到同一臺服務器上.
    acl all src 0.0.0.0/0.0.0.0

   

     #緩存文件全部的目錄以及目錄的格式:
     cache_dir ufs c:/squid/var/cache 256 16 256 

     #ICP 是輕量級的目標定位協議,它做爲Harvest項目的一部分而被髮明。ICP客戶發送查詢消息到一個或多個ICP服務器,詢問它們是否緩存了某個URI。 每一個服務器響應一個ICP_HIT(ICP命中),ICP_MISS(ICP丟失),或其餘類型的ICP消息。ICP客戶使用ICP響應裏的信息來作轉發 決定。除了指示cache命中,ICP也用於提供關於squid和鄰居cache之間網絡條件的線索。當使用icp_port指令時,squid自動成爲 ICP服務器。
     icp_port 3130
    icp_access allow all
    http_access allow all

 

       定義對鄰居cache的訪問列表。也就是說,它決定哪一個請求容許或不容許發送到鄰居cache。參見該 連接。       

     cache_peer_access a allow all

       

     #下面註釋代碼爲錯誤信息保存路徑
     #error_directory c:/squid/usr/local/squid/share/errors/Simplify_Chinese

     # 由於如今的IE都是多線程,考慮到服務器帶寬等網絡資源消耗,因此長連接關閉
      client_persistent_connections off 

     # 服務端長連接是用於在服務器端傳遞消息時使用已打開的socket連接以節省資源而設置的。
      server_persistent_connections on
   
     # 開啓內存池並配置大小
     memory_pools on
     memory_pools_limit 768 MB

    # 顯示客戶端內網IP
     forwarded_for on  

    #關閉client端的統計功能
     client_db off  

    # 訪問日誌,在生產環境下這個文件須要被拆分
     access_log c:/squid/var/logs/squid/access.log

    # 緩存日誌,在生產環境下這個文件須要被拆分
    cache_log c:/squid/var/logs/squid/cache.log

    

      注:C:\squid\sbin\squid.exe.log文件也很重要,它 是squid啓動日誌,當應用程序出現問題時,可從其中找到一些問題。 

      配置完這些信息以後,在命令行窗口下cd 到c:\squid\sbin目錄下執行,執行    

     c:\squid \sbin\>squid -i -n dnt_squid  (注:命名新名稱,可以使用squid -r -n dnt_squid,刪除指定名 稱的服務)
     c:\squid\sbin\>squid -z 

    

     這樣就在機器上安裝的squid的服務。下面就啓動該服務:    

     c:\squid\sbin\>net start dnt_squid (上面定義的服務名稱)  注:中止服 務 net stop dnt_squid

 

     這時在IE上訪問squid服務器:

     http://10.0.8.12:81/(你 的squid服務器IP地址),這時squid會將請求轉到http://10.0.8.12:7001/(以前IIS中建立的web服務器地址)

   

      一樣在10.0.8.14上也安裝並配置 squid,不過要在cache_peer節點上作上面所說的那個配置,就完成了SQUID的配置工做。

      固然,squid緩存的文件基本上都是1:1的,即一個js文件會生成一個緩存文件,大小尺寸沒什麼變化,只不過若是是圖片這類文件的話,squid生 成的緩存文件是沒法用看圖軟件打開的,而文本文件就沒這個問題了。
   
      注:squid官方站點有詳細的配置資料信息,本文介紹的配置內容可做爲入門參考使用。

      最終配置文件下載連接,點擊這裏(壓縮包中的squid.conf文件)。另外我還在本地用LoadRunner作了併發用戶 1000(v_user)的測試,效果不錯,報告下載地址點擊這裏


       同時,squid還提供了一個叫squidclient(位於C:\squid\bin)的客戶端工具頗有用,好比獲取squid運行時的一些系統信息信 息: 

   squidclient -p 81 mgr:info  #squid 運行狀態信息
   squidclient -p 81 mgr:mem   #squid內存使用狀況
   squidclient -p 81 mgr:objects  #quid 已經緩存的列表
   squidclient -p 80 mgr:diskd #squid的磁盤使用狀況

      

       固然用的最多的仍是PURGE指令,它會強制更新某一url緩存信息,形如     

   squidclient -p 81 -m PURGE http://10.0.8.12/:81/css/dnt.css

       

      更多的信息可使用幫助命令: 

   squidclient -h

 

       好的,今天的內容就先到這裏的。 

相關文章
相關標籤/搜索