︿
Top

1、前言

Squid Web Proxy Cache 為目前最多人使用的 Proxy Server,本篇實作為利用 Squid 來架設 Web Proxy Server,關於 Web Proxy 如何運作可參考站內文章 WebProxy 伺服器的原理與運作流程



Squid 支援功能如下:
  • Proxying and caching of HTTP, FTP, and other URLs
  • Proxying for SSL
  • Cache hierarchies
  • ICP, HTCP, CARP, Cache Digests
  • Transparent caching
  • WCCP (Squid v2.3 and above)
  • Extensive access controls
  • HTTP server acceleration
  • SNMP 
  • Caching of DNS lookups





文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.安裝 squid 套件
          步驟2.修改 squid 設定檔 (squid.conf)
          步驟3.初始化 cache dir 目錄結構
          步驟4.啟動 squid 服務
          步驟5.測試 Squid 是否啟動成功
4、Squid 運作後續注意事項
5、參考
6、Me FAQ
          Q1.檢查 squid 設定檔時顯示訊息 ACL name 'QUERY' not defined!?





2、實作環境

  • FreeBSD 6.x-RELEASE
  • Squid-2.x





3、安裝及設定

步驟 1. 安裝 squid 套件

切換至 Ports Tree 路徑安裝 squid 套件。
cd /usr/ports/www/squid    //切換至安裝路徑
make install clean         //安裝套件並清除暫存檔案




步驟 2. 修改 squid 設定檔 (squid.conf)

安裝 squid 套件完成後系統會顯示訊息告知您相關設定,整理後要點大致如下:
  • 會自動建立 Cache directory: /usr/local/squid/cache
  • 會自動建立 Log directory: /usr/local/squid/logs
  • 上述二個資料夾的 owner:group 請設定為 squid 而目錄權限為 750
  • 預設 squid 服務是 全部拒絕 若要設定允許的範圍請在設定檔內 http_access 加上您允許的對象
  • 啟動 squid 服務前記得 初始化 cache directory (squid -z)
  • 啟動 squid 服務前記得 檢查設定檔語法 是否正確 (squid -f /path/to/squid.conf -k parse)

瞭解上述設定要點之後我們著手進行修改 squid 設定檔 (squid.conf),下列僅簡列出基本設定部份,詳細設定檔內容請參考 Squid configuration directives cache_dir 是指設定 Cache 在 HDD 內的大小 (最多使用 2GB、第一層目錄 16MB、第二層 256MB)。
vi /usr/local/etc/squid/squid.conf   //修改 squid 設定檔
 http_port 3128                     //接受 HTTP 要求時使用的 Port
 maximum_object_size 5120 KB        //設定 Cache 最大值 (超過 5MB 就不 Cache)
 acl QUERY urlpath_regex cgi-bin \? \.php \.asp \.cgi  //對 CGI、PHP、ASP 不作 Cache
 no_cache deny QUERY                //定義 QUERY 項目不作 Cache
 cache_mem 32 MB                    //設定存放在 RAM 裡面的 Cache 大小
 cache_dir ufs /usr/local/squid/cache 2048 16 256  //設定 Cache 在 HDD 內的大小
 cache_log /usr/local/squid/logs/cache.log         //記錄 Squid 的執行狀況
 cache_access_log /usr/local/squid/logs/access.log //記錄 Squid Client
 cache_store_log /usr/local/squid/logs/store.log   //記錄 Squid Cache 哪些網頁資料
 acl all src 0.0.0.0/0.0.0.0                  //ACL Source IP 0.0.0.0 Name all
 acl localhost src 127.0.0.1/255.255.255.255  //Source IP 127.0.0.1 Name localhost
 acl lanuser src 192.168.1.0/24       //Source IP Range 192.168.1.0 Name lanuser
 http_access allow localhost lanuser  //允許 LocalhostLanUser 能用 Squid 服務
 http_access deny all                 //禁止其它 IP 使用 squid 服務




步驟 3. 初始化 cache dir 目錄結構

修改完 Squid 設定檔後若您的 Squid 是第一次安裝的話則請在啟動 Squid Service 之前,必需先進行初始化 Cache Dir 目錄結構 (若是舊版升級的話就不用了,因為初始化會把 Cache 資料清空),請鍵入如下指令來進行初始化 Cache Dir 目錄結構,初始化完成後可至 /usr/local/squid/cache 查看會發現建立許多 Squid Cache 目錄結構 (為之後的 Cache 資料進行分類)。
/usr/local/sbin/squid -z   //初始化 Cache Dir 目錄結構
 2007/12/18 18:00:59| Creating Swap Directories




步驟 4. 啟動 squid 服務

在啟動 Squid 服務之前請修改 /etc/rc.conf 以便系統重新開機時能自動帶起 Suqid 服務。
vi /etc/rc.conf
 squid_enable="YES"        //加入此行


在啟動 Squid 服務之前建議先確定 Squid 設定檔的語法是否正確 (沒任何訊息就代表設定檔語法都正確!!),以免造成不可預期的錯誤。
/usr/local/sbin/squid -f /usr/local/etc/squid/squid.conf -k parse 

鍵入如下指令來啟動 Squid Service。
/usr/local/etc/rc.d/squid start
 Starting squid.




步驟 5. 測試 Squid 是否啟動成功

檢查 Squid Process 是否執行。
ps ax |grep squid
 16954  ??  Is     0:00.00 /usr/local/sbin/squid -D

檢查 Squid 是否 Listen 設定的 HTTP Request Port。
sockstat | grep 3128
 squid    squid      16956 11 tcp4   *:3128                *:*

檢查 Squid 是否作用了。
telnet localhost 3128   //假設 Squid 為本機
 GET / enter             //輸入 GET 及反斜線後在按下 Enter


當 Enter 按下後,若你看到一堆 HTML 的輸出,代表您的 Squid 服務成功運作了 Squid Client 可設定瀏覽器來使用 Web Proxy 了,關於如何設定瀏覽器使用 Web Proxy 可參考如下網路資源:
Internet Explorer
FireFox
Netscape





4、Squid 運作後續注意事項

若您修改 Squid 設定檔內容之後又不想重新啟動 Squid 服務可以鍵入下列指令 (請依個人喜好擇一即可)。
/usr/local/etc/rc.d/squid reload       //squid 重新讀取設定檔 (方法一)
/usr/local/sbin/squid -k reconfigure   //squid 重新讀取設定檔 (方法二)

如何查看 Squid 執行狀況
less /usr/local/squid/logs/cache.log   //可看到 Squid 目前執行狀況
系統重新啟動或關機前,應先停止 Squid 服務,因為 Squid 對硬碟讀寫很頻繁且會有一堆資料 Cache 在記憶體之中,因此建議您當 Proxy Server 需要重新開機或關機之前請先停止 Squid 服務。
/usr/local/etc/rc.d/squid stop
定期 Rotate Squid Logs,Squid 相關 Logs (access.log、cache.log、store.log) 在不停運作中若不進行 Rotate Logs 除了 Logs 檔案本身會異常肥大之外也可能造成硬碟空間被佔滿,因此建議設定至排程內來定期將 Rotate Squid Logs。
0 3 * * * /usr/local/sbin/squid -k rotate   //定期於每天早上 3 點 Rotate Logs





5、參考






6、Me FAQ

Q1. 檢查 squid 設定檔時顯示訊息 ACL name 'QUERY' not defined!?

Error Message:
修改好 Squid 設定檔後執行檢查設定檔的指令後顯示說找不到定義的 ACL 名稱 QUERY?
squid -f /usr/local/etc/squid/squid.conf -k parse
 2007/12/18 13:55:54| ACL name 'QUERY' not defined!
 FATAL: Bungled squid.conf line 2446: no_cache deny QUERY
 Squid Cache (Version 2.6.STABLE17): Terminated abnormally.

Answer:
原因為 Squid 設定檔內關於 ACL 名稱 QUERY 定義順序顛倒了,修改後再度檢查設定檔內容就沒問題了。
acl QUERY urlpath_regex cgi-bin \? \.php \.asp \.cgi
no_cache deny QUERY      //此行要放在 ACL 下面
文章標籤: