Web的缓存加速(Squid的安装与配置)
[Web的緩存加速(Squid的安裝與配置)]
1.Squid代理服務器基礎知識
默認端口3128
1.1代理形式
-
傳統代理
(正向代理)適用于Internet正向代理,需在客戶機指定代理服務器的地址和端口。
-
透明代理
客戶機不需指定代理服務器的地址和端口,而是通過默認路由、防火墻策略將web訪問重定向給代理服務器處理。
- 邊界服務器的時候使用
-
反向代理
反向代理:如果squid反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端;否則反向代理服務器將向后臺的WEB服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。
-
默認端口3128
1.2 緩存工作機制
緩存網頁對象(靜態網頁資源),減少重復請求
1.3 代理工作機制
代理的工作機制:
1.代替客戶機向網站請求數據,從而可以隱藏用戶的真實IP地址。
2.將獲得的網頁數據(靜態Web元素)保存到緩存中并發送給客戶機,以便下次請求相同的數據時快速響應。
1.4 代理服務器
1.4.1概念
代理服務器是一一個位于客戶端和原始(資源)服務器之間的服務器,為了從原始服務器取得內容,客戶端向代理服務器發送一個請求并指定目標原始服務器,然后代理服務器向原始服務器轉交請求并將獲得的內容返回給客戶端。
緩存代理對于web至關重要,尤其對于大型高負載web站點。緩存可作為性能優化的一-個重要手段,可以極大減輕后端服務器的負載。通常對于靜態資源,即較少經常更新的資源,如圖片,css或js等進行緩存,從而在每次刷新瀏覽器的時候,不用重新請求,而是從緩存里面讀取,這樣就可以減輕
服務器的壓力。
1.4.2 作用
資源獲取:代替客戶端實現從原始服務器的資源獲取;
加速訪問:代理服務器可能離原始服務器更近,從而起到一-定的加速作用;
緩存作用:代理服務器保存從原始服務器所獲取的資源,從而實現客戶端快速的獲取;
隱藏真實地址:代理服務器代替客戶端去獲取原始服務器資源,從而隱藏客戶端真實信息。
1.4.3 常見緩存代理服務器
- NGINX
兼職,通過三方模塊實現 - Squid
傳統,穩定,能將緩存數據持久化
適用于大文件
支持正向反向代理 - Varnish
性能更好,資源開銷比Squid高
只支持反向代理,數據都在內存中
安全性較Squid較差,但無傷大雅
1.5 ACL
訪問控制列表(ACL)是一種基于包過濾的訪問控制技術,它可以根據設定的條件對接口上的數據包進行過濾,允許其通過或丟棄。訪問控制列表被廣泛地應用于路由器和三層交換機,借助于訪問控制列表,可以有效地控制用戶對網絡的訪問,從而最大程度地保障網絡安全。
ACL與防火墻關系:
同:
ACL(訪問控制列表)和防火墻都執行過濾流量的功能。
異:
1.防火墻是一個獨立功能(可以是專有硬件也可以是安裝在通用服務器上的軟件),而ACL是路由器或三層網絡設備上的功能。
2.防火墻通過跟蹤記錄流量的狀態,檢查數據包,可對數據包執行至7層應用層探測;ACL對數據包逐包執行無狀態檢查,檢查端口和協議內容(4層)。
ACL和防火墻_Mia_Zh的博客
2. 實驗配置
2.1 編譯安裝squild
2.1.1 編譯步驟
## 首先關閉防火墻和SElinux [root@squid_service ~]# systemctl stop firewalld.service [root@squid_service ~]# systemctl disable firewalld.service [root@squid_service ~]# setenforce 01.編譯安裝Squild(安裝包在/opt目錄下)
## 編譯環境安裝 [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 \ #使用內核過濾 --enable-linux-tproxy \ #支持透明模式 --enable-async-io=100 \ #異步IO,提升存儲性能 --enable-err-language="Simplify_ Chinese" \ #錯誤信息的顯示語言 --enable-underscore \ #允許URL中有下劃線 --disable-poll \ #關閉默認使用poll模式 --enable-epoll \ #開啟epoll模式提升性能 --enable-gnuregex #使用GNU正則表達式 ##四核編譯安裝 [root@squid_service squid-3.5.28]# make -j4 && make install ##配置運行環境 [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.運行環境配置
##配置運行環境 [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 之前,允許任意客戶機使用代理服務,控制規則自上而下匹配 http_access deny all http_port 3128 #用來指定代理服務監聽的地址和端口(默認的端口號為 3128) --61行--插入 cache_effective_user squid #添加,指定程序用戶,用來設置初始化、運行時緩存的賬號,否則啟動不成功 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.創建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 "正在關閉 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是啟動優先級,25是停止優先級, #優先級范圍是0一100,數字越大,優先級越低。 [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.運行環境與文件配置
3.創建啟動腳本
2.2 配置傳統代理模式
2.2.1 傳統代理模式簡介
代理服務器被用于緩存遠程主機上的數據到本地代理服務器。當被緩存的數據被第二次訪問的時候,客戶端將直接從本地代理服務器獲取請求數據而不再向原遠程主機請求數據。但是要想實現這種方式,必須在每一個本地客戶端上明確指明代理服務器的IP地址、端口號。
客戶端訪問時,每次都把請求送給代理服務器處理,代理服務器根據請求確定是否連接到遠程主機獲取數據。如果在本地緩存有目標文件,則直接將文件傳給用戶即可。如果沒有的話則先取回文件,先在本地保存一份緩存,然后將文件發給本地客戶端。
2.2.2 環境準備與服務器配置
| 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 #指定緩存功能所使用的內存空間大小,便于保持訪問較頻繁的WEB對象,容量最好為4的倍數,單位為MB,建議設為物理內存的1/4 reply_body_max_size 1 MB #允許用戶下載的最大文件大小,以字節為單位,當下載超過指定大小的Web對象時,瀏覽器的報錯頁面中會出現“請求或訪問太大”的提示默認設置0表示不進行限制 maximum_object_size 700 KB #允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶 _____________________________ [root@squid_service squid-3.5.28]# service squid restart ##重啟服務 [root@squid_service squid-3.5.28]# systemctl restart squid如果未關閉防火墻則需要配置下面兩條規則。
[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配置
客戶端訪問配置
先不配置代理服務,直接訪問網頁服務器。
訪問兩個圖片15.jpg :10.25MB,0.5jpg:527.24KB(15.JPG原圖有15MB,由于apache和火狐瀏覽器默認的壓縮配置,導致大小的壓縮)。
在配置火狐瀏覽器的代理瀏覽。
清理瀏覽器緩存。再次訪問網頁服務器。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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查看網頁服務器訪問日志。
可以看到代理前的.45主機訪問記錄,和代理后的.20主機訪問記錄
2.3 透明代理
2.3.1 透明代理簡介
透明代理提供的服務功能與傳統代理是一致的,但是其“透明”的實現依賴于默認路由和 防火墻的重定向策略,因此更適用于為局域網主機服務,而不適合為 Internet 中的客戶機提 供服務。
在 Linux 網關上,構建 Squid 為客戶機訪問 Internet 提供代理服務。
在所有的局域網客戶機上,只需正確設置 IP 地址、默認網關和 DNS,不需要手動指定 代理服務器的地址、端口等信息
2.3.2 環境準備與服務器配置
| squid服務器 | 網卡ens33:192.168.80.20 網卡ens37:12.0.0.1 |
| web服務器 | 192.168.80.25 |
| 客戶端 | 12.0.0.12 |
squid服務器配置
[root@squid_service ~]# vim /etc/squid.conf --64行--修改添加提供內網服務的IP地址,和支持透明代理選項 transparent http_port 12.0.0.1:3128 transparent[root@squid_service ~]# systemctl restart squid#開啟路由轉發,實現本機中不同網段的地址轉發 [root@squid_service ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf [root@squid_service ~]# sysctl -p #修改防火墻規則 [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 #用于轉發http協議 [root@squid_service ~]# iptables -t nat -I PREROUTING -i ens37 -s 12.0.0.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 #用于轉發https協議 [root@squid_service ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT2.3.3 操作截圖
關閉客戶機所有代理服務,配置網關為12.0.0.1
訪問WEB服務器192.168.80.25
查看 Squid 訪問日志的新增記錄
查看 Web 訪問日志的新增記錄,顯示的是由代理服務器的外網口代替客戶機在訪問
2.4 ACL控制
2.4.1 squid的ACL控制簡介
Squid 提供了強大的代理控制機制,通過合理設置 ACL(Access Control List,訪問控 制列表)并進行限制,可以針對源地址、目標地址、訪問的 URL 路徑、訪問的時間等各種 條件進行過濾。
在配置文件 squid.conf 中,ACL 訪問控制通過以下兩個步驟來實現:
1.使用 acl 配置項定義需要控制的條件;
2.通過 http_access 配置項對已定義的列表做“允許”或“拒 絕”訪問的控制。
2.4.2 環境準備與服務器配置
| squid服務器 | 網卡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" #調用指定文件中的列表內容 ...... 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 的站點信息、時間占用信息、排名、連接次數、 訪問量等。
2.5.2 SARG安裝配置
需要實現準備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" #網頁標題 --120行--取消注釋,修改 output_dir /var/www/html/squid-reports #報告輸出目錄 --178行--取消注釋 user_ip no #使用用戶名顯示 --184行--取消注釋,修改 topuser_sort_field connect reverse #top排序中,指定連接次數采用降序排列,升序是normal --190行--取消注釋,修改 user_sort_field connect reverse #對于用戶訪問記錄,連接次數按降序排序 --206行--取消注釋,修改 exclude_hosts /usr/local/sarg/noreport #指定不計入排序的站點列表的文件 --257行--取消注釋 overwrite_report no #同名同日期的日志是否覆蓋 --289行--取消注釋,修改 mail_utility mailq.postfix #發送郵件報告命令 --434行--取消注釋,修改 charset UTF-8 #指定字符集UTF-8 --518行--取消注釋 weekdays 0-6 #top排行的星期周期 --525行--取消注釋 hours 0-23 #top排行的時間周期 --633行--取消注釋 www_document_root /var/www/html #指定網頁根目錄#添加不計入站點文件,添加的域名將不被顯示在排序中 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報告網頁。創建腳本,自動生成日志
#添加計劃任務,執行每天生成報告 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 服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。
工作機制:
●緩存網頁對象,減少重復請求
●將互聯網請求輪訓或按權重分配到內網Web服務器
●代理用戶請求,避免用戶直接訪問Web服務器,提高安全
2.6.2 環境準備與服務器配置
| squid服務器 | 網卡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端口發出請求---------------------------------------------------------------------------------------------------------- http_port 80 accel vhost vport #squid從一個緩存變成了一個Web服務器反向代理加速模式,這個時候squid在80端口監聽請求,同時和web server的請求端口(vhost vport)綁定,這個時候請求到了squid,squid是不用轉發請求的,而是直接要么從緩存中拿數據要么向綁定的端口直接請求數據。 accel :反向代理加速模式 vhost :支持域名或主機名來表示代理節點 vport :支持IP和端口來表示代理節點parent :代表為父節點,上下關系,非平級關系 80 :代理內部web服務器的80端口 0 :沒有使用icp(電信運營商),表示就一臺squid服務器 no-query :不做查詢操作,直接獲取數據 originserver :指定是源服務器 round-robin :指定 squid 通過輪詢方式將請求分發到其中一臺父節點 max_conn :指定最大連接數 weight : 指定權重 name :設置別名 ----------------------------------------------------------------------------------------------------------//清空之前透明模式配置的 iptables 規則 iptables -F iptables -t nat -Fsystemctl stop httpd #防止 httpd 服務使用的 80 端口號和 squid 反向代理配置的監聽端口沖突 systemctl restart squid2.6.3 操作截圖
1.squid服務器配置文件修改
2.客戶端訪問測試
客戶端先配置域名解析
客戶端關閉代理設置
:指定 squid 通過輪詢方式將請求分發到其中一臺父節點
max_conn :指定最大連接數
weight : 指定權重
name :設置別名
//清空之前透明模式配置的 iptables 規則
iptables -F
iptables -t nat -F
systemctl stop httpd #防止 httpd 服務使用的 80 端口號和 squid 反向代理配置的監聽端口沖突
systemctl restart squid
總結
以上是生活随笔為你收集整理的Web的缓存加速(Squid的安装与配置)的全部內容,希望文章能夠幫你解決所遇到的問題。