Squid 代理伺服器 (反向代理 Reverse Proxy)

由 Derek 發表於 七月 9, 2012 / 2 則評論

什麼是Squid ?

Squid 扮演著一種中介的角色,可用來節省使用者在連結網頁時所使用的頻寬,加快內部網路訪問的速度,並且也能提供監控記錄方便查詢。

Squid代理伺服器是網路上常見的服務之一優點如下:

1. 可以儲存暫存,減少伺服器的負載,同時也可提升Client訪問網頁的速度。

2. 可以解決現階段IPv4不足的問題,減少外網IP使用量。

3. 可對Web訪問時對內容進行過濾,設定一些網頁訪問的規則。也正因為介於伺服器和Client之間,在某些程度上可提高伺服器的安全性。

在 Squid 代理上可分為 正向代理、反向代理、通透式代理(透明代理)。以下就來介紹反向代理(Reverse Proxy)

 

反向代理 (Reverse Proxy) 

至於反向代理剛好和正向代理相反。客戶端是不需要做任何設定,當客戶端向Reverse Proxy 發出請求時。Reverse Proxy會主動判斷導向到那一個Web Server,以減少網站同一時間的流量過大,可以做到負載平衡。只要是高流量、客戶端數量大的網站,一般都會架設這種 Reverse Proxy 來減少 Web Server 的負載

 

系統環境

Centos 5.8  64位元

squid-2.6.STABLE21-6.el5

 

一台Squid Server

外網 : 220.133.192.160

 

兩台Web Server

內網 : Web1 192.168.1.7

Web2 192.168.1.37

 

反向代理 (Reverse Proxy)

Server

1. 設定DNS record

不論DNS是自管或是代管的,都請先在DNS設定上將domain指向到Squid server的記錄

 

2. 安裝Squid

2.1 先檢查是否已經有安裝Squid

2.2 如果沒安裝的話請自行安裝

 

3. squid.conf配置

可參考FAQ設定範例squid.conf

 

重要設定   

3.1設置squid主機名稱

會需要設定visible_hostname 主要是因為,若DNS解析有問題時,會找不到主機名而出錯,因此加上此設定可避免此問題,也可減少無法啟動squid的問題。

visible_hostname  squid.faq-test.tk   squid.faq-test.tk 可修改為該台主機名稱或是內網IP

 

3.2 修改埠號並設定加速模式

設定squid為accel加速模式,vhost必須要加.否則將無法將指向轉發至後端服務器,訪問時就會出現無法找到的錯誤

icp_port 0 為設定監聽埠號

 

3.3 反向代理加速配置 虛擬服務器 (重要)

cache_peer 192.168.1.7 parent 80 0 no-query originserver round-robin weight=1 name=web1

cache_peer 192.168.1.37 parent 80 0 no-query originserver round-robin weight=1 name=web2

上述兩行的意思是分別把192.168.1.7指向到web1、192.168.1.37指向到web2。

 

中述兩行則是把www.faq-test.tk分別指向到web1和web2,也因上述兩行參數中有設定name=web1和name=web2。因此當指回到web1和web2時,就會對應到正確的IP

cache_peer_domain web1 www.faq-test.tk

cache_peer_domain web2 www.faq-test.tk

 

下述兩行則是允許web1和web2使用

cache_peer_access web1 allow all

cache_peer_access web2 allow all

 

常用參數說明如下  詳細說明請看這邊options參數說明

 

3.4 修改使用權限

 

一般設定

3.5 修改快取目錄的相關設定 (cache_dir)

雖然在反向代理用不太到,不過還是設定一下好了

此目錄主要是用來存放快取資料的位置和相關設定,磁碟快取是影響proxy效能的一個相當重要的參數。

cache_dir ufs /var/spool/squid 100 16 256

100 表示為磁碟使用量為100MB (可自行修改)

16  表示在第一層共有16個次目錄

256 表示在每層次目錄內再分為256個次目錄

比較常見的快取目錄且效能較佳的為16  256或64  64。因為在這兩層次目錄的部份是可不用去做修改。只需修改磁碟使用量。

 

3.6記憶體

3.6.1 squid 使用的記憶體計算方式

給proxy 額外使用的記憶體,主要用來處裡較為熱門的快取資料。預設1GB的磁碟快取會佔用約10M的記憶體,而Squid本身會佔用約15MB。在上述1.3 時,設定磁碟大小為10GB,整體Squid會使用到的記憶大小試算方式如下:

10 * 10 + 15 + “cache_mem 設定值 (8)”= 123MB

在Squid的官網上建議實體記憶體的大小最好是上面試算出來的兩倍以上,如此一來效能才會比較好一些。

 

3.6.2設置快取記憶體

如果實體記憶體比較大時,可透過修改快取記憶體來提升squid的效能

cache_mem預設是8MB,可依各人需求修改

 

3.7 設定LOG存放位置

基本上LOG預設都是存放在/var/log/squid裡。如果有需要修改的也可以自行修改存放路徑。

cache_access_log曾經使用過 squid 的用戶記錄

cache_log        暫存LOG

cache_store_log  儲存使用狀態的LOG

 

3.8 設定控制磁碟容量上限

cache_swap_high 95  當磁碟使用超過95%時,開始刪除舊有的快取

cache_swap_low 90   當刪除到90%時,停止刪除。

也就是說,假設我的磁碟空間有10GB,然後當使用到10G*0.95=9.5G時,就會開始從磁碟空間中最舊的資料開始刪除。然後當刪除到剩下10G*0.9=9G時,就會停止刪除了。基本上這樣的設定就足夠使用了,所以也不用特意的去修改數值。

 

3.9設定使用者與使用者群組

若是有設定此項的話,請記得新增使用者和組群。

也要查看一下LOG是否也為該使用者,若有問題的話請記得修改權限

 

4. 防火牆設定

4.1 添加防火牆規則

由於反向代理已經把port改為80port,所以需要在防火牆的部份添加開通80port的規則。不論是squid server或是web1和web2都需要添加此規則

 

5.啟動設定

5.1 Squid 運行參數說明

 

5.2檢查是否正常啟動

Squid 的預設port為80,可查看此port是否正常LISTEN

或是使用ps來查看是否有正常在運作中

[Note] 由於反向代理是不需要設定Client端的,因此在server端設定完成後就可使用了。

 

 

以上是Squid 反向代理的基本設定

接下來介紹一些進階的設定

 

首先來介紹一下

多個Squid server和web server

以下用 2台Squid server 2台web server 為範例

增加多個Squid server和web server的好處有

1. 當網站流量比較大時,可以做到負載平衡,以避免掛掉

2. 透過DNS server來讓兩台squid server輪詢,當用戶端發出請求時若squid1內有暫存相關資料的話,則會直接提供給使用者。但若是查無相關資料時,則會發送給squid2處理。如此一來可減少squid和web server的負載。也可提高網站整體的安全性和效能。

 

系統環境:

Centos 5.8  64位元

squid-2.6.STABLE21-6.el5

兩台Squid Server

外網 : 220.133.192.160

220.133.192.161

 

兩台Web Server

內網 : Web1 192.168.1.7

Web2 192.168.1.37

 

設定內容大都與反向代理的基本設定差不多

主要有幾點差別

1. DNS 需設定兩台Squid server的DNS record,才可做輪詢

2. 在squid.conf配置上需加上指向到Squid1和Squid2

3. 在 hosts 添加設定

 

1. 設定DNS record

不論DNS是自管或是代管的,都請先在DNS設定上將domain指向到Squid1和Squid2的記錄,如此一來才可以輪詢。

 

2. squid.conf配置

在squid.conf配置中,設定大至上都一樣。不太一樣的就如下面要修改和添加的部份了。

 

2.1 設定相互的Squid

當自身的suqid的暫存中查無資料時,會通過ICP去查詢另一台的squid。

cache_peer 220.133.192.161 sibling 80 0

在220.133.192.161的部份可設定為domain或是ip,但請設定另一台的domain或ip。也就是說如果現在設定的為squid1,則在這個部份就要設定為squid2的domain或ip。

如果有三台、四台或更多台squid server的話請一併設定上。只需不要設定自己的。

 

2.2 多web server設定方式

如果有兩個或兩個以上的web server要設定的話。請依以下設定新增

 

2.3設置squid主機名稱

在這邊要注意的是主機名稱請設定為該squid的名稱或IP,要不然會啟動不了。

Squid1 : squid1.far-test.tk

Squid2 : squid2.far-test.tk

 

3. hosts 設定

添加以下設定,主要是讓squid比較好找詢到對方。

squid1.faq-test.tk為domain,220.133.192.160為對應的IP

不管有幾台Squid server 請都設定上

[Note] 以上三點設定完成,大至就沒什麼問題,可以開網頁測試看看摟

 

  

關於作者

一個半路殺出來的傻小子,憑著一股傻勁努力的學習、嘗試、分享。希望能用自己微薄之力,替IT界和資訊界盡一點心力。單憑一己之力始終還是有限,歡迎和我有相同理念的夥伴一同加入一同努力。

評論

  1. Maxsolar 說: 2014/01/28

    謝謝版主精湛的解釋!原來之前都只會把squid當作forward proxy使用而已…

    請問版主,squid跟apache/Nginx等都可以做reverse proxy的功能,該如何去評估使用這幾套軟體作為reverse proxy呢?

    謝謝您!

    • Derek 說: 2014/02/04

      這個部份還是透過實測會比較準確一些

發表評論至 Derek

*