首页 > 代码库 > 2-12-配置squid代理服务器加快网站访问速度
2-12-配置squid代理服务器加快网站访问速度
本节所讲内容:
squid服务器常见概念
squid服务器安装及相关配置文件
实战:配置squid正向代理服务器
实战:配置透明squid代理提升访问速度
实战:配置squid反向代理加速度内网web服务器访问速度
squid服务概述:
全称: squid cache,是一个流行的自由软件(GNU通用公共许可证).
主要有连个功能: 代理服务器 和 为web服务器提供缓存
应用广泛:
1. 共享网络资源,缓存万维网;
2.为web服务器前置缓存提高web服务器的访问速度;
3. 域名和其他网络搜索;
4. 过滤流量,帮助网络安全;
5. 局域网代理上网
主要平台在 Unix类系统
官网:http://www.squid-cache.org
squid:乌贼 的意思
加速原理:
模式: C/S 模式
安装squid服务:
yum -y install squid
或
rpm -ivh /mnt/Packages/squid-*.rpm
端口:3128
vim /etc/services
netstat -antup | grep 3128
配置文件:
/etc/squid/squid.conf
启动服务
/etc/init.d/squid start
或
service squid start
开机启动:
chkconfig squid on
chkconfig --list squid
实战举例
实验环境:
Server ---> xiaogan64 IP:eth0 192.168.31.64
eth1:192.168.64.1
Client1 ---> xp IP:eth0 192.168.64.123
Client2 ---> xiaogan63 IP:eth0 192.168.64.63
例1:配置squid正向代理服务器
需求分析:
搭建squid服务器,是内网机器,可以通过squid服务器加速上网
Action:
1. Server端,安装squid服务
yum -y install squid
2. 配置squid实现正向代理
cp /etc/squid/squid.conf /etc/squid/squid.conf.bak #先备份!
vim /etc/squid/squid.conf
修改 http_access deny all
为 http_access allow all #即去掉注释,允许所有主机通过
3. 启动服务
/etc/init.d/squid start
4. 服务器使用两块网卡,
外网---> eth0 IP:192.168.31.64 (桥接模式)
内网---> eth1 IP:192.168.64.1 (VMnet6模式)
添加第二块网卡后,运行如下命令即可:
ifconfig eth1 192.168.64.1/24 #不要设置网关!!!
5. 客户端xp系统,安装浏览器,
并设置IP地址:192.168.64.123/24 网关:192.168.64.1(服务器IP)
注意:不必设置DNS,因为服务器已经帮助我们把域名解析了!!!
打开浏览器,并设置代理,步骤如下!
工具 ---> Internet选项 ---> 连接 ---> 局域网设置
---> 设置代理服务器 192.168.64.1 端口3128 Ok,尝试浏览网页!
当我们在xp系统中,运行cmd,ping www.qq.com 时,发现ping不通,但是浏览器可以访问网站?!
总结:代理的过程:你的需求给代理,代理替你访问,然后返回给你。
互动:客户端需要不配置 DNS?
不需要,因为客户端把链接http://www.qq.com 发给代理后,代理会替你解析完域名,并把收到的数据再转给客户端浏览器。
例2:配置squid,搭建透明代理服务器
透明代理= squid + iptables
分析: 由于在例1中,通过浏览器,将需求的信息,通过squid服务器的3128端口导向了80端口,所以我们可以配置squid让其默认实现端口转发.(即在服务端只需设置好IP即可,不用设置IE代理)
即:客户端不用在浏览器里指定代理服务器的ip地址和端口号,就可以直接访问公网上的网站服务器。
Action:
1. 直接修改配置文件/etc/squid/squid.conf
vim /etc/squid/squid.conf
修改 http_access deny all 为
http_access allow all
修改 http_port 3128
为 http_port 3128 transparent
2. 重启或重载squid
/etc/init.d/squid reload
或 /etc/init.d/squid restart
3. 启动iptables,并配置iptables规则
配置前,设置默认接收,并清空规则
iptables -P INPUT ACCEPT
iptables -F
配置iptables如下:
开启路由转发: echo 1 >> /proc/sys/run/ipv4/ip_forward
vim /etc/sysctl.conf
修改 net.ipv4.ip_forward 值 =1
sysctl -p #是修改生效
配置规则:
iptables -t nat -A POSTROUTING -s 192.168.64.0/24 -j SNAT --to 192.168.31.64
# SNAT代理内部上网,将内部的地址全部转化为可以上网的地址 192.168.31.64
iptables -t nat -A PREROUTING -s 192.168.64.0/24 -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
# 端口转化,来自192.168.64.0,从eth1且端口为80的数据进行数据重定向到3128,代理服务器为你工作
4. 客户端去掉代理设置,尝试浏览网页
例3:配置squid反向代理加速度内网web服务器访问速度
国内主要反向代理 CDN 厂商:网宿 , 蓝汛 百度,腾讯,阿里云等等都有CDN服务。
反向代理服务器: 要求内存够大,硬盘要够快不需要太大。
拓扑图:
让外网中 win10主机 访问192.168.31.64代理服务器.
代理服务器缓存192.168.64.63 web服务器中的数据.
实现xiaogan64给xiaogan63加速 80和81端口
只加速度静态页面或 视频。
Actions:
1. 公网客户端,物理机:
win10 IP: 192.168.31.248:
修改物理机hosts文件:
windows hosts文件在: C:\Windows\System32\drivers\etc
首先,在 Client 端修改 hosts 文件,添加如下两行:
192.168.31.64 www.xiaogan-a.org
192.168.31.64 www.xiaogan-b.org
注:添加这两行 ,目的是为了让客户端能够解析这两个域名
(www.xiaogan-a.com 和www.xiaogan-b.com)
其对应 IP 为 192.168.31.64 ( squid 反向代理服务器的 IP)
2. 配置xiaogan64 squid代理服务器:
这里,Squid 反向代理服务器监听端口:80 (默认是:3128)便于浏览器浏览
访问时,需要在客户端,打开浏览器,在浏览器地址栏输入:
www.xiaogan-a.com:80 ---> 浏览器默认端口80,所以可以不写:80
配置squid代理服务器xiaogan64:
# 配置Squid 服务器监听本机 80 端口,开启vhost 支持虚拟主机功能,这样也可以给多台服务器加速。
vim /etc/squid/squid.conf
改:#http_access denny all
为: http_access allow all
改:http_port 3128
为:http_port 80 vhost
##打开虚拟主机支持 ,在此行下面,添加以红色内容:
cache_peer 192.168.64.63 parent 80 0 no-query originserver weight=1 name=a
cache_peer 192.168.64.63 parent 81 0 no-query originserver weight=1 name=b
cache_peer_domain a www.xiaogan-a.com
cache_peer_domain b www.xiaogan-b.com
# 以上4行配置,让 Squid 服务器知道:
# 从客户端过来的请求,如果是 www.xiaogan-a.com,则 Squid 向 192.168.64.63的端口 80发送请求;
# 从客户端过来的请求,如果是 www.xiaogan-b.com,则 Squid 向 192.168.64.63 的端口 81 发送请求;
cache_peer_access a allow all
cache_peer_access b allow all
# cache_peer_access 设置:允许其它 cache 机和访问a和b
重启服务:
service squid reload
说明:
1) cache_peer 设置与其它 cache 机的通讯,也处理加速方式的核心设置
cache_peer hostname type http-port icp-port [options]
no-query 不发送 icp 信息包到此机器,一般设置原始主机用(如果是 cache 机,则需要互相发送 icp 包验证存在性)
originserver 指定此机为原始内容服务器,用于加速模式
type: either ‘parent‘(父亲), ‘sibling‘(兄弟), or ‘multicast‘(广播——最好不用).原始服务器配成 parent
2) cache_peer_domain 限制/指定用户访问的邻居 cache 域,类似
cache_peer_access,cache_peer_domain europe-cache.org parent .ch .dk .fr 以
fr/dk/ch 结尾的域名访问 europe 缓存
3) cache_peer_access cache-host allow|deny [!]aclname 类似 acl,对 cache 机器进行访问控制,一般不用。例子:cache_peer_access 192.168.0.249 allow HTTP
其它配置参数说明: 以下
#cache_dir ufs /var/spool/squid 100 16 256
# 指定 Squid 服务器存放数据的目录
配置两个站点xiaogan63 配置HTTP虚拟主机:
基于端口做虚拟主机:
mkdir /var/www/html/xiaogana
mkdir /var/www/html/xiaoganb
echo www.xiaogan-a.org > /var/www/html/xiaogana/index.html
echo www.xiaogan-b.org > /var/www/html/xiaoganb/index.html
vim /etc/httpd/conf/httpd.conf
在Listen 80 行后添加如下行:
Listen 81
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /var/www/html/xiaogana
ServerName www.xiaogan-a.org
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost *:81>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /var/www/html/xiaoganb
ServerName www.xiaogan-b.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
重启httpd服务
service httpd restart
测试:
www.xiaogan-a.org
www.xiaogan-b.org
另外,也可以把squid代理设置为80端口,这样客户端,在访问数据时,就可以直接访问了。不需要输入端口号了。
在上面实验的基础上,修改以下内容:
[root@xiaogan63 ~]# vim /etc/squid/squid.conf
改:http_port 8000 vhost
为:http_port 80 vhost ##打开虚拟主机支持 ,在此行下面,添加以红色内容:
重启squid服务器:
[root@xiaogan63 ~]#service squid restart
测试:
在浏览器中访问:www.servera.com 和www.serverb.com 可以正常访问。
http://blog.csdn.net/kumu_linux/article/details/7892984
//注:cache_men不能超过cache_dir中的一个数值,否则会出现如下报错,
停止 squid:2012/08/21 16:05:46| WARNING cache_mem is larger than totaldisk cache space!
http://zhumeng8337797.blog.163.com/blog/static/1007689142011111112431140/
CDN简介及选择技巧:
CDN服务
CDN的全称Content Delivery Network,(缩写:CDN)即内容分发网络。CDN目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,解决 Internet 网络拥塞状况,提高用户访问网站的响应速度。
CDN的组成部分
CDN是一种组合技术,其中包括源站、缓存服务器、智能DNS、客户端等几个重要部分。
源站:源站指发布内容的原始站点。添加、删除和更改网站的文件,都是在源站上进行的;另外缓存服务器所抓取的对象也全部来自于源站。
缓存服务器:
缓存服务器是直接提供给用户访问的站点资源,有一台或数台服务器组成;当用户发起访问时,他的访问请求被智能DNS定位到离他较近的缓存服务器。如果用户所请求的内容刚好在缓存里面,则直接把内容返还给用户;如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站抓取内容,然后再返还给用户。
智能DNS:
智能DNS是整个CDN技术的核心,它主要根据用户的来源,将其访问请求指向离用户比较近的缓存服务器,如把广州电信的用户请求指向到广州电信IDC机房中的缓存服务器。通过智能DNS解析,让用户访问同服务商下的服务器,消除国内南北网络互相访问慢的问题,达到加速作用。智能DNS的出现,颠复了传统的一个域名对应一个镜像的做法,让用户更加便捷的去访问网站。
客户端:
客户端或称用户端即发起访问的普通用户,一般的访问方式是浏览器。这里就不再做详细说明。
工作原理
传统的解析过程:
了解CDN工作原理之前,我们先看看传统的网站访问流程,传统的访问流程没有CDN,那么整个解析:
传统的网站访问过程为:
1. 用户在浏览器中输入要访问的域名;
2. 浏览器向域名解析服务器发出解析请求,获得此域名对应的IP地址;
3. 浏览器利用所得到的IP地址,向该IP对应的服务器发出访问请求;
4. 服务器对此响应,将数据回传至用户浏览器端显示出来。
CDN的解析过程:
1. 用户在浏览器中输入要访问的域名;
2. 浏览器向域名解析服务器发出解析请求,由于CDN对域名解析过程进行了调整,所以用户端一般得到的是该域名对应的CNAME记录,此时浏览器需要再次对获得的CNAME域名进行解析才能得到缓存服务器实际的IP地址。
注:在此过程中,全局负载均衡DNS解析服务器会根据用户端的源IP地址,如地理位置(深圳还是上海)、接入网类型(电信还是网通)将用户的访问请求定位到离用户路由最短、位置最近、负载最轻的Cache节点(缓存服务器)上,实现就近定位。定位优先原则可按位置、可按路由、也可按负载等[智能DNS]。
3. 再次解析后浏览器得到该域名CDN缓存服务器的实际IP地址,向缓存服务器发出访问请求;
4. 缓存服务器根据浏览器提供的域名,通过Cache内部专用DNS解析得到此域名源服务器的真实IP地址,再由缓存服务器向此真实IP地址提交访问请求;
5. 缓存服务器从真实IP地址得到内容后,一方面在本地进行保存,以备以后使用,同时把得到的数据发送到客户端浏览器,完成访问的响应过程;
6. 用户端得到由缓存服务器传回的数据后显示出来,至此完成整个域名访问过程。
通过以上分析可以看到,不论是否使用CDN网络,普通用户客户端设置不需做任何改变,直接使用被加速网站原有域名访问即可。对于要加速的网站,只需修改整个访问过程中的域名解析部分,便能实现透明的网络加速服务。
传统更直观的图解:
用户在自己的浏览器中输入要访问的网站的域名
浏览器向本地DNS请求对该域名的解析
本地DNS将请求发到网站授权的DNS服务器
授权DNS将服务器的IP地址作为解析结果送给本地DNS
本地DNS将解析结果返还给用户,同时将该解析结果保存在自己的缓存中,直到相应的TTL(生存周期)过期,才再向网站的授权DNS请求解析
用户在得到IP地址后,向该地址所指向的网站的服务器进行访问;
CDN更直观图解:
用户向浏览器提供要访问网站的域名,域名解析的请求被发往网站的DNS域名解析服务器;
由于网站的DNS域名解析服务器对此域名的解析设置了CNAME,请求被指向CDN网络中的智能DNS负载均衡系统;
智能DNS负载均衡系统对域名进行智能解析,将响应速度最快的节点IP返回给用户;
浏览器在得到速度最快节点的IP地址以后,向CDN节点发出访问请求;
由于是第一次访问,CDN节点将回到源站取用户请求的数据并发给用户;
当有其他用户再次访问同样内容时,CDN将直接将数据返回给客户,完成请求/服务过程。
精简原理
解决服务器端的“第一公里”问题
缓解甚至消除了不同运营商之间互联的瓶颈造成的影响
减轻了各省的出口带宽压力
缓解了骨干网的压力
优化了网上热点内容的分布
CDN对网络的优化作用原理图如下:
国内外CDN加速有何区别、如何选择CDN?
CDN的前2名是蓝讯和网宿,这个业内异议不大。下面规模较大的有帝联、快网等还有一些新起之秀,比如腾讯云CND,阿里云CND等等,当然小的CDN不计其数。CDN的加速效果更多的依赖于其广泛的节点部署,所以选择一个相对较大的CDN更靠谱。价格方面,流量较小时确实没什么议价空间
由于国内外网络环境的差异,CDN(内容分发网络)的意义也有了不同。在国内,CDN最主要解决的问题是运营商之间的互联互通问题,当然也确实解决了突发流量、大范围覆盖、网民访问缓慢的问题。因此,国内对CDN需求最明显的是大型互联网公司,尤其是视频、游戏、门户、电商等。企业类相对就了解的很少了,只有个别外资企业能够理解CDN的真正意义,国内企业还需要很久的时间去理解。在国外,CDN的相当一部分客户群体是企业,各种与互联网并不直接相关的企业。
CDN的好与坏,个人认为有如下几点:(不分先后)
1,基础建设的投入,也就是节点的质量和数量;(因此小型CDN服务商自然在资金方面是劣势)
2,技术研发投入,对新技术的敏感,对互联网流量的敏感,对IP网络底层技术的敏感;动态数据越来越多,如何针对动态技术进行加速,如何真正高效的动静态分离,如何针对不同业务自动进行识别和区分,如何真正智能的调度流量,等等
3,对互联网公司业务的深刻理解,针对游戏、视频、门户、电商等等互联网公司,不同业务类型有哪些独特的需求,服务和产品该如何实际解决问题,如何让客户真正感觉到方便、实用、高效。
4,服务意识,如何不断提升后台系统的效率,如何给客户一个真正方便简洁的操作界面,如何能利用带宽等数据统计出更有价值的信息给予反馈,如何让CDN服务变得相对透明,而不是成为运维部门的一种工作压力。
5,数据说话,积累了如此多的数据,有什么样的反馈,有什么样的汇总和归纳,能提炼出哪些对客户更有附加价值的东西,是否能发现现在系统的问题从而第一时间解决。
6,运营经验,做运维的朋友们都知道,经验非常重要。因此,一个CDN服务商的服务时间很关键,就像一句老话,吃的盐比你走的路都多,能一样么? 当然,经验不是单纯时间的累计,应该是不断总结、不断改进的过程,漫长确意义非凡。
一些看法:
1,计费标准,由于国内运营商的垄断地位是不可置疑的,因此计费方式很大一部分是受运营商影响的。Akamai是按照流量计费,而国内不得不以带宽计费方式为主。
2,价格高低,如果单纯的只是将运营商的带宽转售给互联网公司,那CDN就变成了带宽批发商,价格自然就只是价格,没有其他价值了。但如果能结合大量的数据,从技术上提升体验,就有了更多的价值,价格自然会高。
3,避免恶性循环,当产品和服务的附加值过低时,恶性循环就开始了。买东西的只看低价,卖东西的只好不断降价,买东西的发现质量越来越差,只好寻找更低的价格,卖东西的就只好不断压缩成本,降低投入...长此以往,后果可想而知。
个人认为一些有价值的东西:
流量调度,说起来简单,能做到Akamai那样的全球调度,不容易;
动态数据,目前国内CDN服务商都没有真正实用、好用的方案,需要持续的技术投入;
高度自动化,一套系统乃至一个公司的效率高低,直接影响结果;
态度,你是只为自己着想,还是能真正站在客户的角度考虑问题,很重要。
Akamai
Akamai于1998年发明CDN技术架构并诞生于麻省理工学院,1999年NASDAQ上市。总部位于美国波士顿。
Akamai是全球最大的CDN服务商,它巨大的网络分发能力在峰值时可达到21Tbps。Akamai公司旨在消除Internet瓶颈和提高互联网用户访问体验,保护最终用户访问网站以及企业内部应用的速度,并且提供全面的云安全服务,提供全球高清流媒体的加速。
目前,该公司为在全球部署150000多台服务器,这些服务器部署在全球90多个国家,800多个城市,1000多个运营商的2500多个节点上。
2-12-配置squid代理服务器加快网站访问速度