Web的缓存加速(Squid的安装与配置)
[Web的緩存加速(Squid的安裝與配置)]
1.Squid代理服務器基礎(chǔ)知識
默認端口3128
1.1代理形式
-
傳統(tǒng)代理
(正向代理)適用于Internet正向代理,需在客戶機指定代理服務器的地址和端口。
-
透明代理
客戶機不需指定代理服務器的地址和端口,而是通過默認路由、防火墻策略將web訪問重定向給代理服務器處理。
- 邊界服務器的時候使用
-
反向代理
反向代理:如果squid反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端;否則反向代理服務器將向后臺的WEB服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。
-
默認端口3128
1.2 緩存工作機制
緩存網(wǎng)頁對象(靜態(tài)網(wǎng)頁資源),減少重復請求
1.3 代理工作機制
代理的工作機制:
1.代替客戶機向網(wǎng)站請求數(shù)據(jù),從而可以隱藏用戶的真實IP地址。
2.將獲得的網(wǎng)頁數(shù)據(jù)(靜態(tài)Web元素)保存到緩存中并發(fā)送給客戶機,以便下次請求相同的數(shù)據(jù)時快速響應。
1.4 代理服務器
1.4.1概念
代理服務器是一一個位于客戶端和原始(資源)服務器之間的服務器,為了從原始服務器取得內(nèi)容,客戶端向代理服務器發(fā)送一個請求并指定目標原始服務器,然后代理服務器向原始服務器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端。
緩存代理對于web至關(guān)重要,尤其對于大型高負載web站點。緩存可作為性能優(yōu)化的一-個重要手段,可以極大減輕后端服務器的負載。通常對于靜態(tài)資源,即較少經(jīng)常更新的資源,如圖片,css或js等進行緩存,從而在每次刷新瀏覽器的時候,不用重新請求,而是從緩存里面讀取,這樣就可以減輕
服務器的壓力。
1.4.2 作用
資源獲取:代替客戶端實現(xiàn)從原始服務器的資源獲取;
加速訪問:代理服務器可能離原始服務器更近,從而起到一-定的加速作用;
緩存作用:代理服務器保存從原始服務器所獲取的資源,從而實現(xiàn)客戶端快速的獲取;
隱藏真實地址:代理服務器代替客戶端去獲取原始服務器資源,從而隱藏客戶端真實信息。
1.4.3 常見緩存代理服務器
- NGINX
兼職,通過三方模塊實現(xiàn) - Squid
傳統(tǒng),穩(wěn)定,能將緩存數(shù)據(jù)持久化
適用于大文件
支持正向反向代理 - Varnish
性能更好,資源開銷比Squid高
只支持反向代理,數(shù)據(jù)都在內(nèi)存中
安全性較Squid較差,但無傷大雅
1.5 ACL
訪問控制列表(ACL)是一種基于包過濾的訪問控制技術(shù),它可以根據(jù)設(shè)定的條件對接口上的數(shù)據(jù)包進行過濾,允許其通過或丟棄。訪問控制列表被廣泛地應用于路由器和三層交換機,借助于訪問控制列表,可以有效地控制用戶對網(wǎng)絡(luò)的訪問,從而最大程度地保障網(wǎng)絡(luò)安全。
ACL與防火墻關(guān)系:
同:
ACL(訪問控制列表)和防火墻都執(zhí)行過濾流量的功能。
異:
1.防火墻是一個獨立功能(可以是專有硬件也可以是安裝在通用服務器上的軟件),而ACL是路由器或三層網(wǎng)絡(luò)設(shè)備上的功能。
2.防火墻通過跟蹤記錄流量的狀態(tài),檢查數(shù)據(jù)包,可對數(shù)據(jù)包執(zhí)行至7層應用層探測;ACL對數(shù)據(jù)包逐包執(zhí)行無狀態(tài)檢查,檢查端口和協(xié)議內(nèi)容(4層)。
ACL和防火墻_Mia_Zh的博客
2. 實驗配置
2.1 編譯安裝squild
2.1.1 編譯步驟
## 首先關(guān)閉防火墻和SElinux [root@squid_service ~]# systemctl stop firewalld.service [root@squid_service ~]# systemctl disable firewalld.service [root@squid_service ~]# setenforce 01.編譯安裝Squild(安裝包在/opt目錄下)
## 編譯環(huán)境安裝 [root@squid_service opt]# yum -y install gcc gcc-c++ make [root@squid_service opt]# tar zxvf squid-3.5.28.tar.gz -C /opt/ [root@squid_service opt]# cd /opt/squid-3.5.28 [root@squid_service squid-3.5.28]# ./configure --prefix=/usr/local/squid \ #指定安裝目錄路徑 --sysconfdir=/etc \ #指定配置文件路徑 --enable-arp-acl \ #MAC地址管控,防止客戶端使用IP欺騙 --enable-linux-netfilter \ #使用內(nèi)核過濾 --enable-linux-tproxy \ #支持透明模式 --enable-async-io=100 \ #異步IO,提升存儲性能 --enable-err-language="Simplify_ Chinese" \ #錯誤信息的顯示語言 --enable-underscore \ #允許URL中有下劃線 --disable-poll \ #關(guān)閉默認使用poll模式 --enable-epoll \ #開啟epoll模式提升性能 --enable-gnuregex #使用GNU正則表達式 ##四核編譯安裝 [root@squid_service squid-3.5.28]# make -j4 && make install ##配置運行環(huán)境 [root@squid_service squid-3.5.28]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/ [root@squid_service squid-3.5.28]# useradd -M -s /sbin/nologin squid [root@squid_service squid-3.5.28]# chown -R squid:squid /usr/local/squid/var/ [root@squid_service squid-3.5.28]# vim /etc/squid.conf2.運行環(huán)境配置
##配置運行環(huán)境 [root@squid_service squid-3.5.28]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/ [root@squid_service squid-3.5.28]# useradd -M -s /sbin/nologin squid [root@squid_service squid-3.5.28]# chown -R squid:squid /usr/local/squid/var/ [root@squid_service squid-3.5.28]# vim /etc/squid.conf _____________________________________ ...... --56行--插入 http_access allow all #放在 http_access deny all 之前,允許任意客戶機使用代理服務,控制規(guī)則自上而下匹配 http_access deny all http_port 3128 #用來指定代理服務監(jiān)聽的地址和端口(默認的端口號為 3128) --61行--插入 cache_effective_user squid #添加,指定程序用戶,用來設(shè)置初始化、運行時緩存的賬號,否則啟動不成功 cache_effective_group squid #添加,指定賬號基本組 _____________________________________ [root@squid_service squid-3.5.28]# squid -k parse #檢查配置文件 [root@squid_service squid-3.5.28]# squid -z #初始化緩存目錄 [root@squid_service squid-3.5.28]# squid #啟動 squid 服務 [root@squid_service squid-3.5.28]# netstat -anpt | grep "squid"3.創(chuàng)建Squid 服務腳本
[root@squid_service squid-3.5.28]# vim /etc/init.d/squid #!/bin/bash #chkconfig: 2345 90 25 PID="/usr/local/squid/var/run/squid.pid" CONF="/etc/squid.conf" CMD="/usr/local/squid/sbin/squid"case "$1" instart)netstat -natp | grep squid &> /dev/nullif [ $? -eq 0 ]thenecho "squid is running"elseecho "正在啟動 squid..."$CMDfi;;stop)$CMD -k kill &> /dev/nullrm -rf $PID &> /dev/null;;status)[ -f $PID ] &> /dev/nullif [ $? -eq 0 ]thennetstat -natp | grep squidelseecho "squid is not running"fi;;restart)$0 stop &> /dev/nullecho "正在關(guān)閉 squid..."$0 start &> /dev/nullecho "正在啟動 squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:$0{start|stop|status|reload|check|restart}";; esac ———————————————————————————————————————————————— #2345是默認自啟動級別,如是 - 代表任何級別都不自啟動; 90是啟動優(yōu)先級,25是停止優(yōu)先級, #優(yōu)先級范圍是0一100,數(shù)字越大,優(yōu)先級越低。 [root@squid_service squid-3.5.28]# chmod +x /etc/init.d/squid [root@squid_service squid-3.5.28]# chkconfig --add squid [root@squid_service squid-3.5.28]# chkconfig --level 35 squid on2.1.2 實際步驟
1.編譯安裝Squid
2.運行環(huán)境與文件配置
3.創(chuàng)建啟動腳本
2.2 配置傳統(tǒng)代理模式
2.2.1 傳統(tǒng)代理模式簡介
代理服務器被用于緩存遠程主機上的數(shù)據(jù)到本地代理服務器。當被緩存的數(shù)據(jù)被第二次訪問的時候,客戶端將直接從本地代理服務器獲取請求數(shù)據(jù)而不再向原遠程主機請求數(shù)據(jù)。但是要想實現(xiàn)這種方式,必須在每一個本地客戶端上明確指明代理服務器的IP地址、端口號。
客戶端訪問時,每次都把請求送給代理服務器處理,代理服務器根據(jù)請求確定是否連接到遠程主機獲取數(shù)據(jù)。如果在本地緩存有目標文件,則直接將文件傳給用戶即可。如果沒有的話則先取回文件,先在本地保存一份緩存,然后將文件發(fā)給本地客戶端。
2.2.2 環(huán)境準備與服務器配置
| WEB服務器 | 192.168.80.25 |
| Squid緩存代理服務器 | 192.168.80.30 |
| 客戶端 | 192.168.80.45 |
Squid緩存代理服務器配置
[root@squid_service squid-3.5.28]# vim /etc/squid.conf --63行--插入 cache_mem 64 MB #指定緩存功能所使用的內(nèi)存空間大小,便于保持訪問較頻繁的WEB對象,容量最好為4的倍數(shù),單位為MB,建議設(shè)為物理內(nèi)存的1/4 reply_body_max_size 1 MB #允許用戶下載的最大文件大小,以字節(jié)為單位,當下載超過指定大小的Web對象時,瀏覽器的報錯頁面中會出現(xiàn)“請求或訪問太大”的提示默認設(shè)置0表示不進行限制 maximum_object_size 700 KB #允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉(zhuǎn)發(fā)給用戶 _____________________________ [root@squid_service squid-3.5.28]# service squid restart ##重啟服務 [root@squid_service squid-3.5.28]# systemctl restart squid如果未關(guān)閉防火墻則需要配置下面兩條規(guī)則。
[root@squid_service squid-3.5.28]# iptables -F [root@squid_service squid-3.5.28]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT2.2.3 操作截圖
Squid配置
客戶端訪問配置
先不配置代理服務,直接訪問網(wǎng)頁服務器。
訪問兩個圖片15.jpg :10.25MB,0.5jpg:527.24KB(15.JPG原圖有15MB,由于apache和火狐瀏覽器默認的壓縮配置,導致大小的壓縮)。
在配置火狐瀏覽器的代理瀏覽。
清理瀏覽器緩存。再次訪問網(wǎng)頁服務器。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QLsDcbB9-1655103925435)(https://img2022.cnblogs.com/blog/2751572/202206/2751572-20220607154001085-1152610458.png)]
可以看到0.5jpg正常訪問,而15.jpg報出403錯誤(訪問錯誤)
使用tail -f /var/log/httpd/access_log查看網(wǎng)頁服務器訪問日志。
可以看到代理前的.45主機訪問記錄,和代理后的.20主機訪問記錄
2.3 透明代理
2.3.1 透明代理簡介
透明代理提供的服務功能與傳統(tǒng)代理是一致的,但是其“透明”的實現(xiàn)依賴于默認路由和 防火墻的重定向策略,因此更適用于為局域網(wǎng)主機服務,而不適合為 Internet 中的客戶機提 供服務。
在 Linux 網(wǎng)關(guān)上,構(gòu)建 Squid 為客戶機訪問 Internet 提供代理服務。
在所有的局域網(wǎng)客戶機上,只需正確設(shè)置 IP 地址、默認網(wǎng)關(guān)和 DNS,不需要手動指定 代理服務器的地址、端口等信息
2.3.2 環(huán)境準備與服務器配置
| squid服務器 | 網(wǎng)卡ens33:192.168.80.20 網(wǎng)卡ens37:12.0.0.1 |
| web服務器 | 192.168.80.25 |
| 客戶端 | 12.0.0.12 |
squid服務器配置
[root@squid_service ~]# vim /etc/squid.conf --64行--修改添加提供內(nèi)網(wǎng)服務的IP地址,和支持透明代理選項 transparent http_port 12.0.0.1:3128 transparent[root@squid_service ~]# systemctl restart squid#開啟路由轉(zhuǎn)發(fā),實現(xiàn)本機中不同網(wǎng)段的地址轉(zhuǎn)發(fā) [root@squid_service ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf [root@squid_service ~]# sysctl -p #修改防火墻規(guī)則 [root@squid_service ~]# iptables -F [root@squid_service ~]# iptables -t nat -F [root@squid_service ~]# iptables -t nat -I PREROUTING -i ens37 -s 12.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 #用于轉(zhuǎn)發(fā)http協(xié)議 [root@squid_service ~]# iptables -t nat -I PREROUTING -i ens37 -s 12.0.0.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 #用于轉(zhuǎn)發(fā)https協(xié)議 [root@squid_service ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT2.3.3 操作截圖
關(guān)閉客戶機所有代理服務,配置網(wǎng)關(guān)為12.0.0.1
訪問WEB服務器192.168.80.25
查看 Squid 訪問日志的新增記錄
查看 Web 訪問日志的新增記錄,顯示的是由代理服務器的外網(wǎng)口代替客戶機在訪問
2.4 ACL控制
2.4.1 squid的ACL控制簡介
Squid 提供了強大的代理控制機制,通過合理設(shè)置 ACL(Access Control List,訪問控 制列表)并進行限制,可以針對源地址、目標地址、訪問的 URL 路徑、訪問的時間等各種 條件進行過濾。
在配置文件 squid.conf 中,ACL 訪問控制通過以下兩個步驟來實現(xiàn):
1.使用 acl 配置項定義需要控制的條件;
2.通過 http_access 配置項對已定義的列表做“允許”或“拒 絕”訪問的控制。
2.4.2 環(huán)境準備與服務器配置
| squid服務器 | 網(wǎng)卡ens33:192.168.80.20 |
| web服務器1 | 192.168.80.25 |
| web服務器2 | 192.168.80.30 |
| 客戶端 | 192.168.80.45 |
squid服務器配置
##建立拒絕訪問的ip地址 [root@squid_service data]# vim ipblock.txt [root@squid_service data]# echo "192.168.80.30" > ipblock.txt [root@squid_service data]# cat ipblock.txt 192.168.80.30 [root@squid_service data]# vim /etc/squid.conf ...... acl destinationhost dst "/etc/squid/dest.list" #調(diào)用指定文件中的列表內(nèi)容 ...... http_access deny(或allow) destinationhost #注意,如果是拒絕列表,需要放在http_access allow all前面# Squid normally listens to port 3128 http_port 3128 #注意這邊要修改為3128端口,如果前面實驗過透明代理的話 [root@squid_service data]# systemctl restart squid2.4.3 操作截圖
客戶端訪問測試:
在未配置代理前
訪問.25web服務
訪問.30服務
配置代理:
清空緩存,再次訪問.25web服務
正常訪問
訪問.30web服務顯示被拒絕訪問。
2.5 配置squid日志分析軟件SARG
2.5.1 SARG簡介
SARG 全稱是 Squid Analysis Report Generator,是一款 Squid 日志分析工具,采用HTML 格式,詳細列出每位用戶訪問 Internet 的站點信息、時間占用信息、排名、連接次數(shù)、 訪問量等。
2.5.2 SARG安裝配置
需要實現(xiàn)準備sarg-2.3.7.tar.gz包。
#安裝圖像處理軟件包 yum install -y pcre-devel gd gd-develmkdir /usr/local/sarg tar zxvf sarg-2.3.7.tar.gz -C /opt/cd /opt/sarg-2.3.7 ./configure --prefix=/usr/local/sarg \ --sysconfdir=/etc/sarg \ #配置文件目錄,默認是/usr/local/etc --enable-extraprotection #額外安全防護---------------------------------------------------------------------------------------------------------- make && make installvim /etc/sarg/sarg.conf --7行--取消注釋 access_log /usr/local/squid/var/logs/access.log #指定訪問日志文件 --25行--取消注釋 title "Squid User Access Reports" #網(wǎng)頁標題 --120行--取消注釋,修改 output_dir /var/www/html/squid-reports #報告輸出目錄 --178行--取消注釋 user_ip no #使用用戶名顯示 --184行--取消注釋,修改 topuser_sort_field connect reverse #top排序中,指定連接次數(shù)采用降序排列,升序是normal --190行--取消注釋,修改 user_sort_field connect reverse #對于用戶訪問記錄,連接次數(shù)按降序排序 --206行--取消注釋,修改 exclude_hosts /usr/local/sarg/noreport #指定不計入排序的站點列表的文件 --257行--取消注釋 overwrite_report no #同名同日期的日志是否覆蓋 --289行--取消注釋,修改 mail_utility mailq.postfix #發(fā)送郵件報告命令 --434行--取消注釋,修改 charset UTF-8 #指定字符集UTF-8 --518行--取消注釋 weekdays 0-6 #top排行的星期周期 --525行--取消注釋 hours 0-23 #top排行的時間周期 --633行--取消注釋 www_document_root /var/www/html #指定網(wǎng)頁根目錄#添加不計入站點文件,添加的域名將不被顯示在排序中 touch /usr/local/sarg/noreportln -s /usr/local/sarg/bin/sarg /usr/local/bin/ sarg --help#驗證 yum install httpd -y systemctl start httpd#運行 sarg #啟動一次記錄瀏覽器訪問 http://192.168.80.20/squid-reports ,查看sarg報告網(wǎng)頁。創(chuàng)建腳本,自動生成日志
#添加計劃任務,執(zhí)行每天生成報告 vim /usr/local/sarg/report.sh #/bin/bash #Get current date TODAY=$(date +%d/%m/%Y) #Get one week ago today YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y) /usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null find ./ -type d -a -name "$(env LANG=en_US.UTF-8 date -d "30 day ago" +%Y%b%d)-$(env LANG=en_US.UTF-8 date -d "29 day ago" +%Y%b%d)" | xargs rm -rf exit 0chmod +x /usr/local/sarg/report.shcrontab -e 0 0 * * * /usr/local/sarg/report.sh2.5.3 操作截圖
1.安裝依賴庫
2.源碼編譯安裝sarg
3.sarg配置文件修改
2.6 squid 反向代理配置
2.6.1 squid反向代理的簡介
如果 Squid 反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端;否則反向代理服務器將向后臺的 Web 服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。
工作機制:
●緩存網(wǎng)頁對象,減少重復請求
●將互聯(lián)網(wǎng)請求輪訓或按權(quán)重分配到內(nèi)網(wǎng)Web服務器
●代理用戶請求,避免用戶直接訪問Web服務器,提高安全
2.6.2 環(huán)境準備與服務器配置
| squid服務器 | 網(wǎng)卡ens33:192.168.80.20 |
| web服務器1 | 192.168.80.25 |
| web服務器2 | 192.168.80.30 |
| 客戶端 | 192.168.80.45 |
squid服務器配置
vim /etc/squid.conf ...... --60行--修改,插入 http_port 192.168.80.20:80 accel vhost vport cache_peer 192.168.80.25 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 cache_peer 192.168.80.30 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2 cache_peer_domain web1 web2 www.canyun.com #表示對www.canyun.com的請求,squid向192.168.80.25和192.168.80.30的80端口發(fā)出請求---------------------------------------------------------------------------------------------------------- http_port 80 accel vhost vport #squid從一個緩存變成了一個Web服務器反向代理加速模式,這個時候squid在80端口監(jiān)聽請求,同時和web server的請求端口(vhost vport)綁定,這個時候請求到了squid,squid是不用轉(zhuǎn)發(fā)請求的,而是直接要么從緩存中拿數(shù)據(jù)要么向綁定的端口直接請求數(shù)據(jù)。 accel :反向代理加速模式 vhost :支持域名或主機名來表示代理節(jié)點 vport :支持IP和端口來表示代理節(jié)點parent :代表為父節(jié)點,上下關(guān)系,非平級關(guān)系 80 :代理內(nèi)部web服務器的80端口 0 :沒有使用icp(電信運營商),表示就一臺squid服務器 no-query :不做查詢操作,直接獲取數(shù)據(jù) originserver :指定是源服務器 round-robin :指定 squid 通過輪詢方式將請求分發(fā)到其中一臺父節(jié)點 max_conn :指定最大連接數(shù) weight : 指定權(quán)重 name :設(shè)置別名 ----------------------------------------------------------------------------------------------------------//清空之前透明模式配置的 iptables 規(guī)則 iptables -F iptables -t nat -Fsystemctl stop httpd #防止 httpd 服務使用的 80 端口號和 squid 反向代理配置的監(jiān)聽端口沖突 systemctl restart squid2.6.3 操作截圖
1.squid服務器配置文件修改
2.客戶端訪問測試
客戶端先配置域名解析
客戶端關(guān)閉代理設(shè)置
:指定 squid 通過輪詢方式將請求分發(fā)到其中一臺父節(jié)點
max_conn :指定最大連接數(shù)
weight : 指定權(quán)重
name :設(shè)置別名
//清空之前透明模式配置的 iptables 規(guī)則
iptables -F
iptables -t nat -F
systemctl stop httpd #防止 httpd 服務使用的 80 端口號和 squid 反向代理配置的監(jiān)聽端口沖突
systemctl restart squid
總結(jié)
以上是生活随笔為你收集整理的Web的缓存加速(Squid的安装与配置)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。