1. 程式人生 > >Squid緩存代理服務器

Squid緩存代理服務器

制作 網段 nginx緩存 rap cpu url 進程 模擬 錯誤

一、關於緩存代理

1、代理的工作機制
作為應用層的代理服務軟件,Squid主要提供緩存加速和應用層過濾控制的功能。當客戶機通過代理來請求Web頁面時,指定的代理服務器會先檢查自己的緩存,如果緩存中已經有客戶機需要訪問的頁面,則直接將緩存中的頁面內容反饋給客戶機;如果緩存中沒有客戶機需要訪問的頁面,則由代理服務器向Internet發送訪問請求,當獲得返回的Web頁面以後,將網頁數據保存到緩存中並發送給客戶機。
HTTP代理的緩存加速對象主要是文字、圖像等靜態Web元素。使用緩存機制後,當客戶機在不同的時候訪問同一Web元素,或者不同的客戶機訪問相同的Web元素時,可以直接從代理服務器的緩存中獲得結果。這樣就大大減少了向Internet重復提交Web請求的過程,提高了客戶機的Web訪問響應速度。

由於客戶機的Web訪問請求實際上是由代理服務器來代替完成的,從而可以隱藏用戶的真實IP地址,起到一定的保護作用。另一方面,代理服務器擔任著類似“經紀人”的角色,所以有機會針對要訪問的目標、客戶機的地址、訪問的時間端進行過濾控制。
技術分享圖片
2、代理的基本類型
根據實現的方式不同,代理服務可分為傳統代理和透明代理兩個常見的代理服務。
1)傳統代理
也就是普通的代理服務,首先必須在客戶機的瀏覽器、QQ聊天工具、下載軟件等程序中手動設置代理服務器的地址和端口,然後才能使用代理服務來訪問網絡。對於網頁瀏覽器,訪問網站時的域名解析請求也會發送給指定的代理服務器。
2)透明代理
提供與傳統代理相同的功能和服務,其區別在於客戶機不需要指定代理服務器的地址和端口,而是通過默認路由、防火墻策略將Web訪問重定向,實際上仍然交給代理服務器來處理。重定向的過程對客戶機來說時是“透明”的,用戶甚至並不知道自己在使用代理服務,所以稱為“透明代理”。使用透明代理時,網頁瀏覽器訪問網站時的域名解析請求將優先發給DNS服務器。
在實際應用中,傳統代理多見於Internet環境,如為QQ程序使用代理可以隱藏本機真實IP地址,為下載工具使用多個代理可以規避服務器的並發連接限制。而透明帶多見於局域網環境,如在Linux網關中啟用透明代理後,局域網主機無需進行額外的設置就可以享受更好的上網速度。

二、搭建Squid傳統代理服務器

技術分享圖片
1、安裝Squid

tar xf squid-3.5.27.tar.gz
yum install gcc gcc-c++ make perl-devel -y  //安裝環境
cd squid-3.5.27/        //進入源碼包進行配置
./configure --prefix=/usr/local/squid \ #單獨將配置文件修改到其他目錄
--sysconfdir=/etc \     #單獨將配置文件修改到其他目錄
--enable-arp-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、更改配置文件(配置傳統代理)
vi /etc/squid.conf
http_access allow all
http_port 3128 //在下面新增
visible_hostname 192.168.80.181
cache_mem 64 MB
cache_swap_low 80
cache_swap_high 97
cache_dir ufs /usr/local/squid/var/cache/squid 512 16 256 //配置硬盤緩存,打開#.緩存目錄512M,其中一級目錄16個,二級256個
cache_effective_user squid
cache_effective_group squid
技術分享圖片

squid -k parse //檢查配置文件
squid -k rec //重新加載配置文件
squid -zX //初始化緩存目錄

3、制作啟動腳本
vi /etc/init.d/squid
#!/bin/bash
#chkconfig: 35 90 25
#config: /etc/squid.conf
#pidfile: /usr/local/squid/var/run/squid.pid
#Description: Squid - Internet Object Cache

PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -utpln | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
$CMD
fi
;;
stop)
$CMD -k kill &>/dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &>/dev/null
if [ $? -eq 0 ]
then
netstat -utpln | 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 "用法:{start | stop | restart | reload | check | status}"
esac

chmod +x /etc/init.d/squid  //添加服務執行權限
chkconfig --add squid   //添加到系統配置中
chkconfig squid on      //在系統配置中開啟
service squid start     //開啟服務
netstat -anpt | grep 3128   //查看監聽端口

技術分享圖片

yum install httpd -y  //在另外一臺服務器上安裝apache
systemctl start httpd   //啟動服務

4、配置代理端口並訪問驗證
Windows使用代理服務器
瀏覽器—工具—Internet選項—連接—局域網(LAN)設置
技術分享圖片
Linux使用代理服務器
vi /etc/profile
末行添加
export HTTP_PROXY=http://192.168.80.100:3128 //使用HTTP協議指定代理
export HTTPS_PROXY=https://192.168.80.100:3128 //使用HTTPS協議指定代理
export FTP_PROXY=http://192.168.80.100:3128 //使用FTP協議指定代理
export NO_PROXY=192.168.1.,192.168.2. //不使用代理的兩個局域網段
source /etc/profile //刷新環境
驗證代理服務器
使用windows瀏覽器訪問網頁192.168.80.110
技術分享圖片
cat /usr/local/squid/var/logs/access.log //在squid服務器跟蹤訪問日誌文件
技術分享圖片
結論:通過訪問日誌可以發現客戶機192.168.80.10訪問web服務器192.168.80.110的記錄,說明squi的代理服務器發揮了作用。
cat /etc/httpd/logs/access_log //在web服務器查看訪問日誌的新增記錄
技術分享圖片
結論:通過訪問日誌可以發現來自代理服務器192.168.80.100的訪問記錄,說明當客戶機使用代理以後,web服務器並不知道客戶機的真實IP地址,因為實際上由代理服務器在代替客戶機訪問。
當客戶機再次訪問同一web頁面時,Squid訪問日誌中會增加新的記錄,但web訪問日誌中的記錄不會有變化(除非頁面變更或強制刷新)。說明重復訪問同一靜態頁面時,實際上頁面是由代理服務器通過緩存提供的。

三、搭建Squid透明代理服務器

技術分享圖片
1、系統環境
內網卡ens33:192.168.80.100
外網卡ens37:192.168.90.100
Web服務器:192.168.80.110
客戶端:192.168.90.11
echo 1 > /proc/sys/net/ipv4/ip_forward //開啟Squid服務器的路由轉發功能
2、更改配置文件(透明代理)
vi /etc/squid.conf //配置服務器並關閉客戶端指定代理設置
技術分享圖片
service squid restart //重啟服務
3、這只iptables的重定向策略

iptables -F //清空iptables策略兵器新建策略
iptables -t nat -I PREROUTING -i ens33 -s 192.168.80.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.80.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
service iptables save

4、ACL訪問控制
1)禁止某IP地址主機上網
acl nolink src 192.168.90.9
http_access deny nolink
2)禁止某網段在某時間段上網
acl nolink src 192.168.1.0/24
acl nowang time MTWHF 9:00-11:30
http_access deny nolink nowang
3)禁止所有人訪問某網站(精確匹配)
acl nourl dstdomain -i www.qq.com
http_access deny nourl
4)禁止所有人訪問某些網站(含有關鍵字的都會過慮)
acl nourl url_regex -i taobao.com
http_access deny nourl
5)禁止下載某類型的文件
acl nof urlpath_regex -i .avi$ .mkv$
http_access deny nof
6)禁止訪問某類型的網站
acl nop url_regex -i ^emule:// ^thunder
http_access deny nop
5、測試透明代理
內網web服務器指定內網網關
vi /etc/sysconfig/network-scripts/ifcfg-ens33
技術分享圖片
外網web瀏覽器指定外網網關
技術分享圖片
打開win7瀏覽器模擬外網客戶端
訪問192.168.80.110 //直接訪問內網主機
技術分享圖片

四、搭建Squid反向代理服務器

技術分享圖片
1、系統環境
增加一臺web服務器對應的IP地址為:192.168.80.120
2、修改配置文件(反向代理)
vi /etc/squid.conf
http_port 192.168.80.100:80 accel vhost vport
cache_peer 192.168.80.110 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.80.120 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com
技術分享圖片

service squid stop  //服務重啟
service squid start

3、Web訪問代理服務器
技術分享圖片

五、Squid日誌分析(sarg工具)

1、安裝sarg工具

yum install httpd gd gd-devel pcre-devel -y     //squid服務器安裝apache和對應的庫文件
tar xf sarg-2.3.11.tar.gz       //解壓源碼包
cd sarg-2.3.11/
./configure \       //安裝前的配置
--prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
make && make install    //編譯安裝

2、相關配置
vi /etc/sarg/sarg.conf //修改日誌分析配置文件
7 access_log /usr/local/squid/var/logs/access.log //squid的訪問日誌位置
25 title "Squid User Access Reports" //網頁標題
120 output_dir /var/www/html/squid-reports //分析報告的存放位置
178 user_ip no //不使用IP代替用戶ID
184 topuser_sort_field BYTES reverse //升序排列
190 user_sort_field BYTES reverse
206 exclude_hosts /usr/local/sarg/noreport //設置不生成報告的主機
257 overwrite_report no
289 mail_utility mailx //指定發郵件命令
434 charset UTF-8
518 weekdays 0-6 //指定top排序星期周期
523 hours 7-12,14,16,18-20 //指定top排序時間周期
633 www_document_root /var/www/html //網頁根目錄
技術分享圖片

touch /usr/local/sarg/noreport //建立不生成報告的主機列表文件
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
sarg        //啟動,執行該命令只記錄一次

技術分享圖片

crontab -e  //做計劃任務分時段記錄
*/10 * * * * /usr/local/bin/sarg 

3、驗證訪問
http://192.168.80.100:81/squid-reports/
技術分享圖片
註意:由於上訴squid做代理80端口被占用,因此將squid服務器httpd對應的端口改為81

六、Varnish與Nginx緩存服務器

1、高性能緩存服務器Varnish
Varnish是一款高性能的、開源的方向代理服務器和緩存器。挪威最大的在線報紙Verdens Gang使用了3臺Varnish代替了原來的12臺Squid,性能更好!
Varnish與Squid的對比如下:
(1)優點
Varnish具有更好的穩定性、更快的訪問速度、更多的並發連接支持數,可以通過管理端口來管理緩存。
(2)缺點
1)在高並發狀態下,Varnish消耗更多的CPU、I/O和內存資源。
2)Varnish進程一旦掛起、崩潰或者重啟,緩存的數據會從內存中釋放,此時所有的請求都會轉發到後端服務器,給後端服務器造成很大壓力。
2、輕量級緩存服務器Nginx
Nginx支持類似Squid的緩存功能,把URL以及相關信息當成key,用MD5編碼Hash後把數據文件保存在硬盤上。
Nginx只能為只當的URL或者狀態碼設置過期時間,並不支持類似Squid的purge命令來手動清除指定的緩存頁面。可以通過第三方的ngx_cache_purge來清除指定的URL緩存。
Nginx的緩存加速功能是由proxy_cache和fastcgi_cache兩個功能模塊完成的。
Nginx緩存加速的特點如下:
1)緩存功能十分穩點,運行速度不遜於Squid。
2)對多核CPU的利用率比其他的開源軟件要好。
3)支持高並發請求數,能同時承受更多的訪問請求。

Squid緩存代理服務器