Squid服務器,Varnish服務器
反向代理
1.1 問題
通過配置代理服務器,實現以下目標:
- 代理服務器可以將遠程的Web服務器頁面緩存在本地
- 代理服務器端口設置為80端口
- 用戶通過訪問代理服務器即可獲得遠程Web服務器上的頁面內容
- 遠程Web服務器對客戶端用戶是透明的
- 利用緩存機制提高網站的響應速度
1.2 方案
使用3臺RHEL7虛擬機,其中一臺作為Squid代理服務器,該服務器用來連接兩個網段,因此需要配置兩塊網卡,地址分別為 192.168.4.5和192.168.2.5。一臺作為客戶端測試主機,IP地址為192.168.4.100。一臺Web服務器,地址為 192.168.2.100,該Web服務器為其他代理提供Web數據源。
實驗環境所需要的主機及對應的IP設置列表如表-1所示。
表-1 主機列表
實驗拓撲如圖-1所示。
圖-1
1.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:構建web服務器
1)使用yum安裝web軟件包
- [root@web ~]# yum -y install httpd
- .. ..
- [root@web ~]# rpm -q httpd
- httpd-2.4.6-40.el7.x86_64
2)啟用httpd服務,並設為開機自動運行
- [root@web ~]# systemctl start httpd ; systemctl enable httpd
httpd服務默認通過TCP 80端口監聽客戶端請求:
- [root@web ~]# netstat -anptu | grep httpd
- tcp 0 0 :::80 :::* LISTEN 2813/httpd
3)為Web訪問建立測試文件
在網站根目錄/var/www/html下創建一個名為index.html的首頁文件:
- [root@web ~]# cat /var/www/html/index.html
- <html>
- <title>Welcome</title>
- <body>
- <h1>192.168.2.100</h1>
- </body>
- </html>
步驟二:部署Squid代理服務器
1)使用yum安裝squid軟件包:
- [root@svr5 ~]# yum -y install squid
- .. ..
2)修改/etc/squid/squid.conf配置文件:
- [root@svr5 ~]# vim /etc/squid/squid.conf
- .. ..
- http_port 80 vhost //設置反向代理
- visible_hostname svr5.tarena.com //設置主機名,默認沒有該語句
- cache_peer 192.168.2.100 parent 80 0 originserver //定義後端真實服務器信息
- cache_dir ufs /var/spool/squid 200 16 256 //硬盤緩存,緩存容量為200M,自動創建16個一級子目錄和256個二級子目錄
- http_access allow all //允許本機所有主機使用代理服務器
3)啟動squid服務,並設置為開機啟動:
- [root@svr5 ~]# systemctl start squid; systemctl enable squid
4)squid服務通過TCP 80端口監聽客戶端請求:
- [root@svr5 ~]# netstat -anptu | grep 80
- tcp 0 0 :::80 :::* LISTEN 3213/(squid)
步驟三:客戶端測試
2)客戶端開啟瀏覽器訪問
- [root@client ~]# curl http://192.168.4.5 //返回的是2.100服務的頁面
2 案例2:使用Varnish加速Web
2.1 問題
通過配置Varnish緩存服務器,實現如下目標:
- 使用Varnish加速後端Apache Web服務
- 使用varnishadm命令管理緩存頁面
- 使用varnishstat命令查看Varnish狀態
2.2 方案
通過源碼編譯安裝Varnish緩存服務器
- 編譯安裝Varnish軟件
- 復制啟動腳本與配置文件
修改配置文件,緩存代理源Web服務器,實現Web加速功能
使用3臺RHEL7虛擬機,其中一臺作為Web服務器(192.168.2.100)、一臺作為Varnish代理服務器(192.168.4.5,192.168.2.5),另外一臺作為測試用的Linux客戶機(192.168.2.100),如圖-2所示。
圖-2
對於Web服務器的部署,此實驗中僅需要安裝httpd軟件、啟動服務,並生成測試首頁文件即可,默認httpd網站根路徑為/var/www/html,首頁文檔名稱為index.html。
2.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:構建Web服務器
1)使用yum安裝web軟件包
- [root@web1 ~]# yum -y install httpd
2)啟用httpd服務,並設為開機自動運行
- [root@web1 ~]# systemctl start httpd ; systemctl enable httpd
httpd服務默認通過TCP 80端口監聽客戶端請求:
- [root@pc205 ~]# netstat -anptu | grep httpd
- tcp 0 0 :::80 :::* LISTEN 2813/httpd
3)為Web訪問建立測試文件
在網站根目錄/var/www/html下創建一個名為index.html的首頁文件:
- [root@pc205 ~]# cat /var/www/html/index.html
- <html>
- <title>Welcome</title>
- <body>
- <h1>192.168.2.100</h1>
- </body>
- </html>
步驟二:部署Varnish緩存服務器
1)編譯安裝軟件
- [root@svr5 ~]# yum -y install gcc readline-devel pcre-devel //安裝軟件依賴包
- [root@svr5 ~]# useradd -s /sbin/nologin varnish //創建賬戶
- [root@svr5 ~]# tar -xzf varnish-3.0.6.tar.gz
- [root@svr5 ~]# cd varnish-3.0.6
- [root@svr5 varnish-3.0.6]# ./configure --prefix=/usr/local/varnish
- [root@svr5 varnish-3.0.6]# make && make install
2)復制啟動腳本及配置文件
- [root@svr5 varnish-3.0.6]# cp redhat/varnish.initrc /etc/init.d/varnish
- [root@svr5 varnish-3.0.6]# cp redhat/varnish.sysconfig /etc/sysconfig/varnish
- [root@svr5 varnish-3.0.6]# ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/
- [root@svr5 varnish-3.0.6]# ln -s /usr/local/varnish/bin/* /usr/bin/
3)修改Varnish文件
- [root@svr5 ~]# vim /etc/sysconfig/varnish
- 66行:VARNISH_LISTEN_PORT=80 #默認端口
- 89行:VARNISH_STORAGE_SIZE=64M #定義緩存大小
- 92行:VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}" #基於內存方式緩存
4)修改代理配置文件
- [root@svr5 ~]# mkdir /etc/varnish
- [root@svr5 ~]# cp /usr/local/varnish/etc/default.vcl /etc/varnish/
- [root@svr5 ~]# uuidgen > /etc/varnish/secret
- [root@svr5 ~]# vim /etc/varnish/default.vcl
- backend default {
- .host = "192.168.2.100";
- .port = "80";
- }
- [root@svr5 ~]# service varnish start
步驟三:客戶端測試
1)客戶端開啟瀏覽器訪問
- [root@client ~]# curl http://192.168.4.5
步驟四:其他操作
1)查看varnish日誌
- [root@svr5 ~]# varnishlog //varnish日誌
- [root@svr5 ~]# varnishncsa //訪問日誌
2)更新緩存數據,在後臺web服務器更新頁面內容後,用戶訪問代理服務器看到的還是之前的數據,說明緩存中的數據過期了需要更新(默認也會自動更新,但非實時更新)。
- [root@svr5 ~]# varnishadm –S /etc/varnish/secret –T 127.0.0.1:6082 ban.url 頁面文件名
- //清空緩存數據,支持正則表達式
Squid服務器,Varnish服務器