文章目錄
一、suqid的介紹
1.1、squid是什麼?
Squid 是一個高性能的http代理服務器和web緩存服務器,可以很好的實現HTTP和FTP以及DNS查詢、SSL等應用的緩存代理。
-
1、代理用戶向web服務器請求數據並進行緩存,可以過濾流量幫助網絡安全。
-
2、可以作爲代理服務器鏈中的一環,向上級代理轉發數據或直接連接互聯網。
-
3、可以用在局域網中,使局域網用戶通過代理上網。
-
4、可以將數據緩存在內存中,同時也緩存DNS查詢的結果,還支持非模塊化的DNS查詢,對失敗的請求進行消極緩存。
-
5、Squid支持SSL,支持ACL訪問控制。
Web代理的工作機制
- 緩存網頁對象,減少重複請求
1.2、squid的優勢
- 1、提高客戶端訪問速度。
- 2、隱蔽內部主機的ip地址。
- 3、部署簡單,可以實現訪問控制。
1.3、squid的作用
- 1、代理上網 (傳統代理,透明代理)
- 2、網站靜態頁面緩存加速(反向代理)
二、squid的代理類型
-
1、傳統代理又叫做正向代理,適用於Internet,需明確指定服務端。
-
2、透明代理,客戶機不需要指定代理服務器的地址和端口,而是通過默認路由、防火牆策略將Web訪問重定向給代理服務器處理
-
3、反向代理
三、squid傳統代理的部署
傳統代理模式
- 客戶端必須在自己的瀏覽器裏指定服務器的ip地址和監聽的端口號,才能通過squid代理服務器**上網。
3.1、 案例介紹
如上圖所示,在服務器B上構建Squid代理服務器,允許客戶機指定squid代理服務器作爲Web代理,訪問網站服務器,但禁止通過代理下載超過10MB的文件,超過4MB的文件不進行緩存。
- 環境介紹
主機 | 系統 | IP地址 | 主要軟件 |
---|---|---|---|
squid代理服務器 | CentoS7.6 | 192.168.100.128 | squid-3.5.27.tar.gz |
WEB服務器 | CentoS7.6 | 192.168.100.131 | Apache |
客戶機 | win10 | 192.168.100.3 | 自帶的瀏覽器 |
先修改主機名,方便實驗效果
[root@localhost ~]# hostnamectl set-hostname squid
[root@localhost ~]# su
[root@squid ~]#
[root@localhost ~]# hostnamectl set-hostname web
[root@localhost ~]# su
[root@web ~]#
3.2、部署過程
1、在squid服務器部署squid服務
1、解壓squid的安裝包
tar zxvf squid-3.4.6.tar.gz -C /opt/
cd /opt/squid-3.4.6/
#先安裝編譯包
yum -y install gcc gcc-c++ make pcre pcre-devel zlib-devel perl
#配置編譯
./configure --prefix=/usr/local/squid \ ##自定義安裝路徑
--sysconfdir=/etc \ ##單獨將配置文件修改到/etc目錄下
--enable-arp-acl \ ##可在ACL中設置通過MAC地址進行管理,防止客戶端使用IP欺騙
--enable-linux-netfilter \ ##使用內核過濾
--enable-linux-tproxy \ ##支持透明模式
--enable-async-io=100 \ ##異步I/O提升存儲性能,值可修改
--enable-err-language ="Simplify_Chinese" \ ##錯誤信息的提示語言
--enable-underscore \ ##允許URL中有下劃線
--enable-poll \ ##使用 poll() 模式,提升性能
--enable-gnuregex ##支持GNU正則表達式
make && make install
#創建鏈接文件,優化路徑
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
#創建程序用戶、組
useradd -M -s /sbin/nologin squid
#改變目錄屬主
chown -R squid.squid /usr/local/squid/var/
2、修改配置文件,編寫腳本優化服務啓動項
vim /etc/squid.conf
//增添下句並註釋deny
http_access allow all
#http_access deny all
//在端口port下增添兩行代碼
http_port 3128
cache_effective_user squid
cache_effective_group squid
coredump_dir /usr/local/squid/var/cache/squid
squid -k parse #檢查配置文件語法
squid –k rec ##重新加載配置文件
squid -z #初始化緩存目錄
squid #啓動服務
netstat -ntap | grep 3128 #查看服務是否啓動
//編寫優化腳本
cd /etc/init.d/
vim 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" in
start)
netstat -natp | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在啓動squid. . ."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | grep squid
else
echo "squid is not running"
fi
;;
restart)
$0 stop &> /dev/null
echo "正在關閉 squid...."
$0 start &> /dev/null
echo "正在啓動 squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法: $0 {start|stop|status|reload|check|restart}"
;;
esac
chmod +x squid
chkconfig --add squid
chkconfig --level 35 squid on #設置爲開機自啓動
service squid stop
service squid start
netstat -ntap | grep 3128
3、配置squid傳統模式
vim /etc/squid.conf
http_port 3128
cache_mem 64 MB #內存空間大小
reply_body_max_size 10 MB #允許下載最大文件大小
maximum_object_size 4096 KB #允許保存緩存的空間最大對象大小
http_access deny all #前面兩行需要放在這行之上才生效
iptables -F #清空防火牆規則
iptables -t nat -F
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
#-I:插入input鏈 -p:協議 允許3128端口訪問外網的WEB服務器
//重新加載squid服務
service squid reload
netstat -ntap | grep 3128
4、配置web服務器
//關閉防火牆
systemctl stop firewalld
setenforce 0
//安裝httpd
yum install httpd -y
echo "welcome to test web" > /var/www/html/index.html
systemctl start httpd
//進入目錄下,設置測試內容
cd /var/www/html/
dd if=/dev/zero of=test1.tgz bs=1M count=11
dd if=/dev/zero of=test2.tgz bs=1M count=2
5、在客戶端驗證
1、設置win10虛擬機的IP地址
2、設置IE瀏覽器----internet選項----連接-----局域網設置----勾選代理服務器,填寫IP地址和端口號—IP:squid服務器地址 端口號爲3128
驗證:訪問web服務器地址,並查看web服務器的訪問日誌access.log是代理服務器地址訪問,
即squid代理服務器搭建成功。
注意:access.log日誌在 /etc/httpd/logs/目錄下
之前設置了允許下載最大的文件大小爲10M,test2文件可以下載,test1過大超出範圍,提示不能下載。