Squid 加速及反向代理与负载均衡php
/************************************************概念开始*********************************************************/
代 理服务器是使用很是广泛的一种将局域网主机联入互联网的一种方式,使用代理上网能够节约紧缺的IP地址资源,并且能够阻断外部主机对内部主机的访问,使内 部网主机免受外部网主机的攻击。可是,若是想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机攻击,通常的代 理服务是不能实现的,须要使用反向代理来实现。css
一.反向代理的概念html
什么是反向代理呢?其实,反向代理也就是一般所说的WEB服务器加速,它是一种经过在繁忙的WEB服务器和Internet之间增长一个高速的WEB缓冲服务器(即:WEB反向代理服务器)来下降实际的WEB服务器的负载。典型的结构以下图所示:前端
Web服务器加速(反向代理)是针对Web服务器提供加速功能的。它做为代理Cache,但并不针对浏览器用户,而针对一台或多台特定Web服务器(这也 是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache设备放置在一台或多台Web服务器前端便可。当互联网用户访问某个WEB服务器时,经过DNS服务器解析后的IP地址是Reverse Proxy Server的IP地址,而非原始Web服务器的IP地址,这时Reverse Proxy Server设备充当Web服务器,浏览器能够与它链接,无需再直接与Web服务器相连。所以,大量Web服务工做量被卸载到反向代理服务上。不但可以防 止外部网主机直接和web服务器直接通讯带来的安全隐患,并且可以很大程度上减轻web服务器的负担,提升访问速度。web
二.反向代理和其它代理的比较windows
下面将对几种典型的代理服务做一个简单的比较。在网络上常见的代理服务器有三种:浏览器
1. 标准的代理缓冲服务器 一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次 访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而再也不向原web站点请求数据。这样就节省了宝贵的网络带宽,并且提升了访问速度。可是,要想 实现这种方式,必须在每个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请 求肯定是否链接到远程web服务器获取数据。若是在本地缓冲区有目标文件,则直接将文件传给用户便可。若是没有的话则先取回文件,先在本地保存一份缓冲, 而后将文件发给客户端浏览器。 2. 透明代理缓冲服务器 透明代理缓冲服务和标准代理服务器的功能彻底相同。可是,代理操做对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻 断网络通讯,而且过滤出访问外部的HTTP(80端口)流量。若是客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,若是在本地没有缓冲则向远程web服务器发出请求,其他操做和标准的代理服务器彻底相同。对于Linux操做系统来讲,透明代理使用Iptables或者Ipchains实现。由于 不须要对浏览器做任何设置,因此,透明代理对于ISP(Internet服务器提供商)特别有用。 3. 反向代理缓冲服务器 反向代理是和前两种代理彻底不一样的一种代理服务。使用它能够下降原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求, 防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理全部对WEB服务器的请求,组织了WEB服务器和Internet的直接通讯。 若是互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。若是没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存 后再发送给用户。这种方式经过下降了向WEB服务器的请求数从而下降了WEB服务器的负载。缓存
三.反向代理工做原理安全
反向代理服务器位于本地WEB服务器和Internet之间,以下图所示:服务器
当用户浏览器发出一个HTTP请求时,经过域名解析将请求定向到反向代理服务器(若是要实现多个WEB服务器的反向代理,须要将多个WEB服务器的域名 都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理通常只缓存可缓冲的数据(好比html网页和图片等),而一些CGI脚本程序或者ASP之 类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面。有四个最重要HTTP头标记:
Last-Modified: 告诉反向代理页面什么时间被修改
Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
Cache-Control: 告诉反向代理页面是否应该被缓冲
Pragma: 告诉反向代理页面是否应该被缓冲.
例如:在默认状况下,ASP页面返回”Cache-control: private.”,因此ASP页面时不会在反向代理服务器缓存的。
/************************************************概念结束*********************************************************/
客户端(192.168.2.166)访问web服务器(192.168.0.164),在web服务器以前放置一台squid缓存服务器(192.168.1.104),
web服务器上的域名解析都解析到squid缓存服务器上(也就是解析到这个IP192.168.1.104),
而后客户端用访问web的时候,根据域名解析,全部访问都将直接到缓存服务器,
缓存服务器上再作转发请求web服务器的内容,而后传递给用户。
由于squid使用的接口是80,转发给web服务器时web服务器也用80端口接收请求,
因此感受不到中间有个缓存服务器的存在,
可是正是因为缓存服务器的存在,web服务器的负载下降,安全性提升了
用户第一次访问缓存服务器的时候,缓存服务器会向web请求内容
请求结束以后会保存一些静态的文件在缓存服务器上,譬如图片css js等
而动态的文件 相似php asp之类的都不被缓存,由于这个是实时更新的
下一个用户访问一样的内容时,会直接从缓存服务器读取缓存内容 这样就让用户以为速度很快
vi squid.conf
http_port 3128 accel(加速模式)vhost vport
###若这里写80之外的端口都要在代理机上作端口重定向,即未来自80端口的请求重定向到3128上##########
visible_hostname squid.abc.com(3.0之后比设)
cache_mgr
cache_mem 64 MB
cache_dir ufs /usr/local/squid_cache 4096 16 256
ufs(/var/spool/squid)最大缓存为100 M 一级缓存目录为16个二级为256个
#定义不一样的父节点,将节点设为no-query以及originserver说明这些节点是实际服务器
cache_peer 192.168.1.164 parent 80 0 no-query originserver name=test1 round-robin
cache_peer 192.168.1.238 parent 80 0 no-query originserver name=test2 round-robin
######如有两台squid或多台服务器则只须要添加
cache_peer 192.168.129.21 sibling 80 3130 name=cache1
cache_peer 192.168.129.22 sibling 80 3130 name=cache2
#链接本地的与另外一台Squid工做在sibling模式,实现数据的调取
cache_peer_domain test1 www.sun.com
cache_peer_domain test2 www.sun.com
error_directory /usr/local/squid/share/errors/Simplify_Chinese
emulate_httpd_log on
access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none
cache_peer_access test1 allow all
cache_peer_access test2 allow all
(设置访问权限,容许全部外部客户端访问test1 test2 )
acl Manager proto cache_object
acl Localhost src 127.0.0.1/32
acl CONNECT method CONNECT
acl sun src 192.168.2.0/24
1.http_access allow Manager Localhost
2.http_access deny Manager(这两行表示只容许Localhost,在写容许与拒绝时最好按照格式位置写)
….................
http_access allow sun
http_access deny All
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
icp_port 0
以上黑体为最基本配置
在访问的机子上要作DNS解析www.sun.com
注意:
192.168.2.166这个机器上 要将/etc/hosts(windows是这个文件c:/widows/system32/drivers/etc/hosts)里加入192.168.1.164www.abc.com同时在web机器上绑定www.abc.com这个域名
这样直接输入www.abc.com就能访问到164缓存服务器了
用IP直接访问164的话 会出现“您请求的网址(URL)没法获取”错误
#容许客户端全部请求(这里能够设置拦截url,格式以下面两行缓存设置)
http_access allow all
# 设置不缓存url类型(空格隔开
acl QUERY urlpath_regex .php .jsp .asp .pl .cgi
cache deny QUERY