Squid缓存代理服务器

网友投稿 719 2022-05-29

一、关于缓存代理

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 "" 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

;;

Squid缓存代理服务器

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  //在另外一台服务器上安装apachesystemctl 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 3128iptables -t nat -I PREROUTING -i ens33 -s 192.168.80.0/24 -p tcp --dport 443 -j REDIRECT --to 3128iptables -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)支持高并发请求数,能同时承受更多的访问请求。

----------------------------------

本文转自居思涵博客51CTO博客

DNS 网站

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【云驻共创】华为云大数据技术解密之MapReduce服务
下一篇:防火墙原理与定义
相关文章