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