Squid代理服务器(缓存加速之Web缓存层)
文章目錄
- 1 Squid 代理服務(wù)器
- 1.1 代理的工作機(jī)制
- 1.2 代理服務(wù)器的概念及其作用
- 1.3 Squid 代理的類(lèi)型
- 2 安裝 Squid 服務(wù)
- 1 編譯安裝 Squid
- 2 修改 Squid 的配置文件
- 3 Squid 的運(yùn)行控制
- 4 創(chuàng)建 Squid 服務(wù)腳本
- 3 構(gòu)建傳統(tǒng)代理服務(wù)器
- 4 構(gòu)建透明代理服務(wù)器
- 4.1 Squid 服務(wù)器配置
- 4.2 Web 服務(wù)器配置
- 5 ACL 訪(fǎng)問(wèn)控制
- 5.1 定義訪(fǎng)問(wèn)控制列表
- 5.1 啟動(dòng)對(duì)象列表管理
- 5.2 Web 服務(wù)器配置
- 6 Squid 日志分析
- 6.1 安裝圖像處理軟件包
- 6.2 添加計(jì)劃任務(wù),執(zhí)行每天生成報(bào)告
- 7 Squid 反向代理
- 7.1 Squid 服務(wù)器配置
- 7.2 后端節(jié)點(diǎn)服務(wù)器設(shè)置
- 7.3 客戶(hù)機(jī)的域名映射配置
- 總結(jié)
1 Squid 代理服務(wù)器
Squid 主要提供緩存加速、應(yīng)用層過(guò)濾控制的功能。
1.1 代理的工作機(jī)制
- 代替客戶(hù)機(jī)向網(wǎng)站請(qǐng)求數(shù)據(jù),從而可以隱藏用戶(hù)的真實(shí) IP 地址。
- 將獲得的網(wǎng)頁(yè)數(shù)據(jù)(靜態(tài) Web 元素)保存到緩存中并發(fā)送給客戶(hù)機(jī),以便下次請(qǐng)求相同的數(shù)據(jù)時(shí)快速響應(yīng)。
緩存網(wǎng)頁(yè)對(duì)象,減少重復(fù)請(qǐng)求
1.2 代理服務(wù)器的概念及其作用
代理服務(wù)器是一個(gè)位于客戶(hù)端和原始(資源)服務(wù)器之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶(hù)端向代理服務(wù)器發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)原始服務(wù)器,然后代理服務(wù)器向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶(hù)端。
緩存代理對(duì)于 Web 至關(guān)重要,尤其對(duì)于大型高負(fù)載 Web 站點(diǎn)。緩存可作為性能優(yōu)化的一個(gè)重要手段,可以極人減輕后端服務(wù)器的負(fù)載。通常對(duì)于靜態(tài)資源,即較少經(jīng)常更新的資源,如圖片,css 或 js 等進(jìn)行緩存,從而在每次刷新瀏覽器的時(shí)候,不用重新請(qǐng)求,而是從緩存里面讀取,這樣就可以減輕服務(wù)器的壓力。
主要作用
- 資源獲取:代替客戶(hù)端實(shí)現(xiàn)從原始服務(wù)器的資源獲取;
- 加速訪(fǎng)問(wèn):代理服務(wù)器可能離原始服務(wù)器更近,從而起到一定的加速作用;
- 緩存作用:代理服務(wù)器保存從原始服務(wù)器所獲取的資源,從而實(shí)現(xiàn)客戶(hù)端快速的獲取;
- 隱藏真實(shí)地址:代理服務(wù)器代替客戶(hù)端去獲取原始服務(wù)器資源,從而隱藏客戶(hù)端真實(shí)信息。
1.3 Squid 代理的類(lèi)型
-
傳統(tǒng)代理:適用于 Internet,需在客戶(hù)機(jī)指定代理服務(wù)器的地址和端口。
-
透明代理:客戶(hù)機(jī)不需指定代理服務(wù)器的地址和端口,而是通過(guò)默認(rèn)路由、防火墻策略將Web訪(fǎng)問(wèn)重定向給代理服務(wù)器處理。
-
反向代理:如果 Squid 反向代理服務(wù)器中緩存了該請(qǐng)求的資源,則將該請(qǐng)求的資源直接返回給客戶(hù)端;否則反向代理服務(wù)器將向后臺(tái)的 WEB 服務(wù)器請(qǐng)求資源,然后將請(qǐng)求的應(yīng)答返回給客戶(hù)端,同時(shí)也將該應(yīng)答緩存在本地,供下一個(gè)請(qǐng)求者使用。
2 安裝 Squid 服務(wù)
關(guān)閉防火墻
systemctl stop firewalld #關(guān)閉系統(tǒng)防火墻 systemctl disable firewalld #關(guān)閉防火墻開(kāi)機(jī)自啟 setenforce 0 #關(guān)閉系統(tǒng)安全機(jī)制1 編譯安裝 Squid
yum -y install gcc gcc-c++ make #安裝gcc gcc-c++編譯環(huán)境以及編譯器 cd /opt tar zxvf squid-3.5.28.tar.gz
2 修改 Squid 的配置文件
vim /etc/squid.conf--------56行插入--------- http_access allow all #放在 http_access deny all 之前,允許任意客戶(hù)機(jī)使用代理服務(wù) http_access deny all http_port 3128 #用來(lái)指定代理服務(wù)監(jiān)聽(tīng)的地址和端口(默認(rèn)的端口號(hào)為 3128)--------61行插入--------- cache_effective_user squid #添加,指定程序用戶(hù),用來(lái)設(shè)置初始化、運(yùn)行時(shí)緩存的賬號(hào),否則啟動(dòng)不成功 cache_effective_group squid #添加,指定賬號(hào)基本組coredump_dir /usr/local/squid/var/cache/squid #指定緩存文件目錄3 Squid 的運(yùn)行控制
#檢查配置文件語(yǔ)法是否正確 squid -k parse #啟動(dòng) Squid #啟動(dòng)squid,第一次啟動(dòng)squid服務(wù)時(shí),會(huì)自動(dòng)初始化緩存目錄 squid -z #-z 選項(xiàng)用來(lái)初始化緩存目錄 squid #啟動(dòng) squid 服務(wù)netstat -anpt | grep "squid"4 創(chuàng)建 Squid 服務(wù)腳本
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 "正在啟動(dòng) 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 "正在啟動(dòng) squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:$0{start|stop|status|reload|check|restart}";; esac#2345是默認(rèn)自啟動(dòng)級(jí)別,如是-代表任何級(jí)別都不自啟動(dòng); #90是啟動(dòng)優(yōu)先級(jí),25是停止優(yōu)先級(jí),優(yōu)先級(jí)范圍是0-100,數(shù)字越大,優(yōu)先級(jí)越低。 chmod +x /etc/init.d/squid #給該服務(wù)啟動(dòng)腳本可執(zhí)行權(quán)限 chkconfig --add squid #將該服務(wù)加入chkconfig管理 chkconfig --level 35 squid on #能在級(jí)別3:字符界面,級(jí)別5:視圖界面中自啟動(dòng) chkconfig --list squid #查看能在哪幾個(gè)運(yùn)行級(jí)別中自啟動(dòng) 2345腳本中是默認(rèn)自啟動(dòng)級(jí)別3 構(gòu)建傳統(tǒng)代理服務(wù)器
vim /etc/squid.conf ...... http_access allow all http_access deny all http_port 3128 cache_effective_user squid cache_effective_group squid --63行--插入 cache_mem 64 MB #指定緩存功能所使用的內(nèi)存空間大小,便于保持訪(fǎng)問(wèn)較頻繁的WEB對(duì)象, #容量最好為4的倍數(shù),單位為MB,建議設(shè)為物理內(nèi)存的1/4 reply_body_max_size 10 MB #允許用戶(hù)下載的最大文件大小,以字節(jié)為單位,當(dāng)下載超過(guò)指定大小的Web對(duì)象時(shí), #瀏覽器的報(bào)錯(cuò)頁(yè)面中會(huì)出現(xiàn)“請(qǐng)求或訪(fǎng)問(wèn)太大”的提示默認(rèn)設(shè)置0表示不進(jìn)行限制 maximum_object_size 4096 KB #允許保存到緩存空間的最大對(duì)象大小,以KB為單位,超過(guò)大小限制的文件將不被緩存,而是直接轉(zhuǎn)發(fā)給用戶(hù)service squid restart systemctl restart squid#生產(chǎn)環(huán)境中還需要修改防火墻規(guī)則 iptables -F iptables -I INPUT -p tcp --dport 3128 -j ACCEPT#客戶(hù)機(jī)的代理配置 打開(kāi)瀏覽器,工具-->Internet選項(xiàng)-->連接-->局域網(wǎng)設(shè)置-->開(kāi)啟代理服務(wù)器(地址:Squid服務(wù)器IP地址,端口:3128)#查看 Squid 訪(fǎng)問(wèn)日志的新增記錄中的緩存命中情況 tail -f /usr/local/squid/var/logs/access.logTCP_MEM_HIT/200#查看 Web 訪(fǎng)問(wèn)日志的新增記錄 tail -f /var/log/httpd/access_log 在瀏覽器輸入Web服務(wù)器IP地址訪(fǎng)問(wèn),查看Web服務(wù)器訪(fǎng)問(wèn)日志,顯示的是由代理服務(wù)器替客戶(hù)機(jī)在訪(fǎng)問(wèn)。4 構(gòu)建透明代理服務(wù)器
環(huán)境配置
| Squid 服務(wù)器 | CentOS7 | 雙網(wǎng)卡,內(nèi)網(wǎng)ens33:192.168.16.10 外網(wǎng)ens36:12.0.0.1 | squid-3.5.28.tar.gz |
| Web 服務(wù)器 | CentOS7 | 12.0.0.12 | httpd |
| 客戶(hù)機(jī) | Windows | 192.168.16.100 | —— |
4.1 Squid 服務(wù)器配置
vim /etc/squid.conf ...... http_access allow all http_access deny all --60行--修改添加提供內(nèi)網(wǎng)服務(wù)的IP地址,和支持透明代理選項(xiàng) transparent http_port 192.168.16.10:3128 transparent #內(nèi)網(wǎng)卡的IP地址systemctl restart squid#開(kāi)啟路由轉(zhuǎn)發(fā),實(shí)現(xiàn)本機(jī)中不同網(wǎng)段的地址轉(zhuǎn)發(fā) vim /etc/sysctl.conf echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf sysctl -p#修改防火墻規(guī)則 iptables -F iptables -t nat -F iptables -t nat -I PREROUTING -i ens33 -s 192.168.16.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 #用于轉(zhuǎn)發(fā)http協(xié)議 iptables -t nat -I PREROUTING -i ens33 -s 192.168.16.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 #用于轉(zhuǎn)發(fā)https協(xié)議 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #修改PREROUTING目的地址4.2 Web 服務(wù)器配置
yum install -y httpd systemctl start httpd關(guān)閉客戶(hù)機(jī)的瀏覽器之前設(shè)置的代理服務(wù)器的功能后訪(fǎng)問(wèn) http://12.0.0.12#查看 Squid 訪(fǎng)問(wèn)日志的新增記錄 tail -f /usr/local/squid/var/logs/access.log 1631073624.552 0 192.168.16.100 TCP_MEM_HIT/200 449 GET http://12.0.0.12/ - HIER_NONE/- text/html#查看 Web 訪(fǎng)問(wèn)日志的新增記錄,顯示的是由代理服務(wù)器的外網(wǎng)口代替客戶(hù)機(jī)在訪(fǎng)問(wèn) tail -f /var/log/httpd/access_log5 ACL 訪(fǎng)問(wèn)控制
在配置文件 squid.conf 中,ACL 訪(fǎng)問(wèn)控制通過(guò)以下兩個(gè)步驟來(lái)實(shí)現(xiàn):
- 使用 acl 配置項(xiàng)定義需要控制的條件;
- 通過(guò) http_access 配置項(xiàng)對(duì)已定義的列表做“允許”或“拒絕”訪(fǎng)問(wèn)的控制。
5.1 定義訪(fǎng)問(wèn)控制列表
格式: acl 列表名稱(chēng) 列表類(lèi)型 列表內(nèi)容 … vim /etc/squid.conf ...... acl localhost src 192.168.16.10/32 #源地址為 192.168.16.10 acl MYLAN src 192.168.16.0/24 #客戶(hù)機(jī)網(wǎng)段 acl destinationhost dst 192.168.16.20/32 #目標(biāo)地址為 192.168.16.20 acl MC20 maxconn 20 #最大并發(fā)連接 20 acl PORT port 21 #目標(biāo)端口 21 acl DMBLOCK dstdomain .qq.com #目標(biāo)域,匹配域內(nèi)所有站點(diǎn) acl BURL url_regex -i ^rtsp:// ^emule:// #以 rtsp://、emule:// 開(kāi)頭的目標(biāo) URL地址,-i表示忽略大小寫(xiě) acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$ #以 .mp3、.mp4、.rmvb 結(jié)尾的目標(biāo) URL 路徑 acl WORKTIME time MTWHF 08:30-17:30 #時(shí)間為周一至周五 8:30~17:30,“MTWHF”為每個(gè)星期的英文首字母環(huán)境配置
| Squid-Server | CentOS7 | 192.168.16.10 | squid-3.5.28.tar.gz |
| Web1 | CentOS7 | 192.168.16.20 | httpd |
| Web2 | CentOS7 | 192.168.16.30 | httpd |
| 客戶(hù)機(jī) | Windows7 | 192.168.16.100 | —— |
5.1 啟動(dòng)對(duì)象列表管理
mkdir /etc/squid vim /etc/squid/dest.list 192.168.16.20vim /etc/squid.conf ...... acl destinationhost dst "/etc/squid/dest.list" #調(diào)用指定文件中的列表內(nèi)容 ...... http_access deny(或allow) destinationhost #注意,如果是拒絕列表,需要放在http_access allow all前面systemctl restart squid5.2 Web 服務(wù)器配置
systemctl stop firewalld.service setenforce 0 yum -y install httpd systemctl start httpd瀏覽器(192.168.16.100)訪(fǎng)問(wèn)Web服務(wù)器 http://192.168.16.20 ,顯示被訪(fǎng)問(wèn)被拒絕,訪(fǎng)問(wèn)http://192.168.16.30則可以訪(fǎng)問(wèn)。6 Squid 日志分析
6.1 安裝圖像處理軟件包
#需要使用在線(xiàn)源,出現(xiàn)報(bào)錯(cuò),將網(wǎng)卡配置文件中的dns和網(wǎng)關(guān)修改回原樣即可 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 \ #配置文件目錄,默認(rèn)是/usr/local/etc --enable-extraprotection #額外安全防護(hù)./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection make && make install vim /etc/sarg/sarg.conf --7行--取消注釋 access_log /usr/local/squid/var/logs/access.log #指定訪(fǎng)問(wèn)日志文件--25行--取消注釋 title "Squid User Access Reports" #網(wǎng)頁(yè)標(biāo)題--120行--取消注釋,修改 output_dir /var/www/html/sarg #報(bào)告輸出目錄--178行--取消注釋 user_ip no #使用用戶(hù)名顯示--184行--取消注釋,修改 topuser_sort_field connect reverse #top排序中,指定連接次數(shù)采用降序排列,升序是normal--190行--取消注釋,修改 user_sort_field connect reverse #對(duì)于用戶(hù)訪(fǎng)問(wèn)記錄,連接次數(shù)按降序排序--206行--取消注釋,修改 exclude_hosts /usr/local/sarg/noreport #指定不計(jì)入排序的站點(diǎn)列表的文件--257行--取消注釋 overwrite_report no #同名同日期的日志是否覆蓋--289行--取消注釋,修改 mail_utility mailq.postfix #發(fā)送郵件報(bào)告命令--434行--取消注釋,修改 charset UTF-8 #指定字符集UTF-8--518行--取消注釋 weekdays 0-6 #top排行的星期周期--525行--取消注釋 hours 0-23 #top排行的時(shí)間周期--633行--取消注釋 www_document_root /var/www/html #指定網(wǎng)頁(yè)根目錄#添加不計(jì)入站點(diǎn)文件,添加的域名將不被顯示在排序中 touch /usr/local/sarg/noreportln -s /usr/local/sarg/bin/sarg /usr/local/bin/ sarg --help#驗(yàn)證 yum install httpd -y systemctl start httpd#運(yùn)行 sarg #啟動(dòng)一次記錄瀏覽器訪(fǎng)問(wèn) http://192.168.16.10/sarg ,查看sarg報(bào)告網(wǎng)頁(yè)。
6.2 添加計(jì)劃任務(wù),執(zhí)行每天生成報(bào)告
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.sh7 Squid 反向代理
如果 Squid 反向代理服務(wù)器中緩存了該請(qǐng)求的資源,則將該請(qǐng)求的資源直接返回給客戶(hù)端;否則反向代理服務(wù)器將向后臺(tái)的 Web 服務(wù)器請(qǐng)求資源,然后將請(qǐng)求的應(yīng)答返回給客戶(hù)端,同時(shí)也將該應(yīng)答緩存在本地,供下一個(gè)請(qǐng)求者使用。
工作機(jī)制
- 緩存網(wǎng)頁(yè)對(duì)象,減少重復(fù)請(qǐng)求
- 將互聯(lián)網(wǎng)請(qǐng)求輪訓(xùn)或按權(quán)重分配到內(nèi)網(wǎng)Web服務(wù)器
- 代理用戶(hù)請(qǐng)求,避免用戶(hù)直接訪(fǎng)問(wèn)Web服務(wù)器,提高安全
| Squid-Server | CentOS7 | 192.168.16.10 | squid-3.5.28.tar.gz |
| Web1 | CentOS7 | 192.168.16.20 | httpd |
| Web2 | CentOS7 | 192.168.16.30 | httpd |
| 客戶(hù)機(jī) | Windows7 | 192.168.16.100 | —— |
7.1 Squid 服務(wù)器配置
vim /etc/squid.conf ...... --60行--修改,插入 http_port 192.168.16.10:80 accel vhost vport cache_peer 192.168.16.20 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 cache_peer 192.168.16.30 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2 cache_peer_domain web1 web2 www.kgc.com #表示對(duì)www.kgc.com的請(qǐng)求,squid向192.168.16.20和192.168.16.30的80端口發(fā)出請(qǐng)求http_port 80 accel vhost vport #squid從一個(gè)緩存變成了一個(gè)Web服務(wù)器反向代理加速模式,這個(gè)時(shí)候squid在 80 端口監(jiān)聽(tīng)請(qǐng)求,同時(shí)和web server的請(qǐng)求端口(vhost vport)綁定,這個(gè)時(shí)候請(qǐng)求到了squid,squid是不用轉(zhuǎn)發(fā)請(qǐng)求的,而是直接要么從緩存中拿數(shù)據(jù)要么向綁定的端口直接請(qǐng)求數(shù)據(jù)。
| vhost | 支持域名或主機(jī)名來(lái)表示代理節(jié)點(diǎn) |
| vport | 支持IP和端口來(lái)表示代理節(jié)點(diǎn) |
| parent | 代表為父節(jié)點(diǎn),上下關(guān)系,非平級(jí)關(guān)系 |
| 80 | 代理內(nèi)部 web 服務(wù)器的 80 端口 |
| 0 | 沒(méi)有使用 icp(電信運(yùn)營(yíng)商),表示就一臺(tái) squid 服務(wù)器 |
| no-query | 不做查詢(xún)操作,直接獲取數(shù)據(jù) |
| originserver | 指定是源服務(wù)器 |
| round-robin | 指定 squid 通過(guò)輪詢(xún)方式將請(qǐng)求分發(fā)到其中一臺(tái)父節(jié)點(diǎn) |
| max_conn | 指定最大連接數(shù) |
| weight | 指定權(quán)重 |
| name | 設(shè)置別名 |
7.2 后端節(jié)點(diǎn)服務(wù)器設(shè)置
#清空之前透明模式配置的 iptables 規(guī)則 iptables -F iptables -t nat -Fsystemctl stop httpd #防止 httpd 服務(wù)使用的 80 端口號(hào)和 squid 反向代理配置的監(jiān)聽(tīng)端口沖突 systemctl restart squid yum install -y httpd systemctl start httpd#節(jié)點(diǎn)1: echo "this is test01" >> /var/www/html/index.html #節(jié)點(diǎn)2: echo "this is test02" >> /var/www/html/index.html7.3 客戶(hù)機(jī)的域名映射配置
修改 C:\Windows\System32\drivers\etc\hosts 文件 192.168.16.10 www.kgc.com瀏覽器不開(kāi)啟代理訪(fǎng)問(wèn) http://www.kgc.com查看緩存命中情況 tailf /usr/local/squid/var/logs/access.log 1631164427.547 0 192.168.16.200 TCP_MEM_HIT/200 381 GET http://www.kgc.com/ - HIER_NONE/- text/html總結(jié)
總結(jié)
以上是生活随笔為你收集整理的Squid代理服务器(缓存加速之Web缓存层)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【蓝桥杯考前一天总结PYthon终结篇】
- 下一篇: 如何阻止华为杀应用_如何解决华为手机“杀