如何提高网站访问速度?
1)前端(优化)
2)提供网站带宽(1000M)、上行、下行对等,一般公司双线介入
3)缓存
浏览器缓存(浏览器会缓存常使用数据,缓存到客户端硬盘)
服务器缓存
网络优化:CDN技术
一、服务器缓存(代理)
1.分类
1)正向代理:部署在企业内部,实现企业内部客户端访问公网加速(ACL、缓存)
传统代理:需在客户端指向正向代理服务器的IP及端口,方可正常使用
透明代理:将正向代理服务器作为网关,客户端只需指明网关地址即可
2)反向代理:部署在企业内部,实现公网客户端访问内部服务器加速
2.缓存方式
1)硬盘:速度慢、缓存时间长
2)内存:速度快、重启后缓存丢失
二、Squid
基于硬盘的缓存方式,支持正向及反向两种代理
1、代理的工作机制
1)Squid服务器中有缓存
当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机
2)Squid服务器中没有缓存
如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机
HTTP代理的缓存加速对象主要是文字、图像等静态Web元素,使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向Internet提交重复的Web请求的过程,提高了客户机的Web访问响应速度
由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色,所以有机会针对要访问的目标、客户机的地址、访问的时间段等进行过滤控制
正向代理(传统代理)
环境准备:两台,一台linu作为squid代理及网关(两块网卡,第一块vmnet1、第二块桥接),另一台windows客户端(vmnet1)
#部署gateway
1.IP配置
1)rm -rf /etc/udev/rules.d/70-persistent-net.rules
2)vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
3)reboot
4)cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
5)/etc/init.d/network restart
2.开启路由功能
1)vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
2)sysctl -p
3)iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.13.206
#部署squid
1.编译安装Squid
配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需求来定,配置前可参考“./configure --help”给出的说明
1)tar -zxvf squid-3.4.6.tar.gz -C /usr/src/
2)cd /usr/src/squid-3.4.6/
3)./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-linux-netfilter --enable-arp-acl --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll
选项详解
--prefix=/usr/local/squid #安装目录
--sysconfdir=/etc/ #单独将配置文件修改到其他目录
--enable-arp-acl #可以在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗
--enable-linux-netfilter #使用内核过滤
--enable-linux-tproxy #支持透明模式
--enable-async-io=值 #异步I/O,提升存储性能
--enable-err-language="Simplify_Chinese" #错误信息的显示语言
--enable-underscore #允许URL中有下划线
--enable-poll #使用Poll()模式,提升性能
--enable-gnuregex #使用GNU正则表达式--enable-gnuregex
4)make && make install
5)echo "PATH=$PATH:/usr/local/squid/sbin" >>/etc/profile && source /etc/profile
6)useradd -M -s /sbin/nologin squid
7)chown -R squid:squid /usr/local/squid/var/
2.更改配置
1)vim /etc/squid.conf
56 http_access allow all #允许所有访问
61 cache_effective_user squid #指定运行用户
62 cache_effective_group squid #指定运行组
63 visible_hostname xueluo.org #指定当前主机名
65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 #启用缓存
68 #coredump_dir /usr/local/squid/var/cache/squid #注释改行
2)squid -k parse #检测配置文件(/etc/squid.conf)是否有问题
3)squid -z #创建缓存目录
3.启动服务
1)vim /etc/init.d/squid
#!/bin/bash
# chkconfig: 2345 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
2)chmod +x /etc/init.d/squid
3)chkconfig --add squid
4)/etc/init.d/squid start
5)netstat -utpln | grep 3128
4.验证
IE-->代理服务器(192.168.1.1 3128) --> 119.75.213.61
1)tail -f /usr/local/squid/var/logs/access.log
正向代理(透明代理)
环境准备:两台,一台linu作为squid代理及网关(两块网卡,第一块vmnet1、第二块桥接),另一台windows客户端(vmnet1)
#部署gateway
1.IP配置
1)rm -rf /etc/udev/rules.d/70-persistent-net.rules
2)vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
3)reboot
4)cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
5)/etc/init.d/network restart
2.开启路由功能
1)vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
2)sysctl -p
3)iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.13.206
#部署squid
1.编译安装Squid
配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需求来定,配置前可参考“./configure --help”给出的说明
1)tar -zxvf squid-3.4.6.tar.gz -C /usr/src/
2)cd /usr/src/squid-3.4.6/
3)./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-linux-netfilter --enable-arp-acl --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll
选项详解
--prefix=/usr/local/squid #安装目录
--sysconfdir=/etc/ #单独将配置文件修改到其他目录
--enable-arp-acl #可以在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗
--enable-linux-netfilter #使用内核过滤
--enable-linux-tproxy #支持透明模式
--enable-async-io=值 #异步I/O,提升存储性能
--enable-err-language="Simplify_Chinese" #错误信息的显示语言
--enable-underscore #允许URL中有下划线
--enable-poll #使用Poll()模式,提升性能
--enable-gnuregex #使用GNU正则表达式--enable-gnuregex
4)make && make install
5)ln -s /usr/local/squid/sbin/* /usr/local/sbin/
6)useradd -M -s /sbin/nologin squid
7)chown -R squid:squid /usr/local/squid/var/
2.更改配置
1)vim /etc/squid.conf
56 http_access allow all #允许所有访问
60 http_port 192.168.1.1:3128 transparent
61 cache_effective_user squid #指定运行用户
62 cache_effective_group squid #指定运行组
63 visible_hostname xueluo.org #指定当前主机名
65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 #启用缓存
68 #coredump_dir /usr/local/squid/var/cache/squid #注释改行
2)iptables -t nat -I PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
3)squid -k parse #检测配置文件(/etc/squid.conf)是否有问题
4)squid -z #创建缓存目录
3.启动服务
1)vim /etc/init.d/squid
#!/bin/bash
# chkconfig: 2345 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
2)chmod +x /etc/init.d/squid
3)chkconfig --add squid
4)/etc/init.d/squid start
5)netstat -utpln | grep 3128
4.测试
IE --> 119.75.213.61
1)tail -f /usr/local/squid/var/logs/access.log
三、Squid的ACL
Squid提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤
在配置文件squid.conf中,ACL访问控制通过以下两个步骤来实现:其一,使用acl配置项定义需要控制的条件;其二,通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制
1.定义访问控制列表
每一行acl配置可以定义一条访问控制列表,格式如下所示
acl 列表名称 列表类型 列表内容 ...
其中,“列表名称”由管理员自行指定,用来识别控制条件;“控制类型”必须使用Squid预定义的值,对应着不同类别的控制条件;“列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格分割,为“或”的关系)
通过上述格式可以发现,定义访问控制列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义类型有很多种,常用的包括源地址、目标地址、访问时间、访问端口等
列表类型 列表内容示例 含义/用途
src 192.168.1.168
192.1681.0/24
192.168.1.0-192.168.3.0/24 源IP地址、网段、IP地址范围
dst 216.163.137.3
61.135.167.0/24
www.playboy.com 目标IP地址、网段、主机名
port 80
443
8080 目标端口
dstdomain .qq.com
.msn.com 目标域,匹配域内所有站点
time MTWHF 8:30-17:30
12:00-13:00
AS 字母表示一星期天中各天的缩写
M--Monday
T--Tuesday
W--Wednesday
H--Thursday
F--Friday
A--Saturday
S--Sunday
maxconn 20 每个客户机的并发连接数
url_regex url_regex -i ^rtsp://
url_regex -i ^emule:// 目标资源的URL地址,-i表示忽略大小写
urlpath_regex urlpath_regex -i \.mp3$ 目标资源的整个URL路径,-i表示忽略大小写
Blog:http://blog.51cto.com/painting