首页 > 代码库 > 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.comwww.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代理服务器加快网站访问速度