1、代理的工作机制 作为应用层的代理服务软件,Squid主要提供缓存加速和应用层过滤控制的功能。当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机需要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机。 HTTP代理的缓存加速对象主要是文字、图像等静态Web元素。使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向Internet重复提交Web请求的过程,提高了客户机的Web访问响应速度。 由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色,所以有机会针对要访问的目标、客户机的地址、访问的时间端进行过滤控制。
2、代理的基本类型 根据实现的方式不同,代理服务可分为传统代理和透明代理两个常见的代理服务。 1)传统代理 也就是普通的代理服务,首先必须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理服务来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发送给指定的代理服务器。 2)透明代理 提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向,实际上仍然交给代理服务器来处理。重定向的过程对客户机来说时是“透明”的,用户甚至并不知道自己在使用代理服务,所以称为“透明代理”。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器。 在实际应用中,传统代理多见于Internet环境,如为QQ程序使用代理可以隐藏本机真实IP地址,为下载工具使用多个代理可以规避服务器的并发连接限制。而透明带多见于局域网环境,如在Linux网关中启用透明代理后,局域网主机无需进行额外的设置就可以享受更好的上网速度。
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访问日志中的记录不会有变化(除非页面变更或强制刷新)。说明重复访问同一静态页面时,实际上页面是由代理服务器通过缓存提供的。
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.9http_access deny nolink2)禁止某网段在某时间段上网acl nolink src 192.168.1.0/24acl nowang time MTWHF 9:00-11:30http_access deny nolink nowang3)禁止所有人访问某网站(精确匹配)acl nourl dstdomain -i www.qq.comhttp_access deny nourl4)禁止所有人访问某些网站(含有关键字的都会过虑)acl nourl url_regex -i taobao.comhttp_access deny nourl5)禁止下载某类型的文件acl nof urlpath_regex -i .avihttp_access deny nof6)禁止访问某类型的网站acl nop url_regex -i ^emule:// ^thunderhttp_access deny nop5、测试透明代理内网web服务器指定内网网关vi /etc/sysconfig/network-scripts/ifcfg-ens33外网web浏览器指定外网网关打开win7浏览器模拟外网客户端访问192.168.80.110 //直接访问内网主机
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访问代理服务器
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
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)支持高并发请求数,能同时承受更多的访问请求。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有