反向代理服务器有两种传输模式:

1.同步模式:(如:squid)用户发起请求,请求立即被转到后端的服务器,于是在浏览器和后端服务器之间就建立了一个连接,在请求完成前这个连接是一直存在的。

2.异步模式:(如:nginx)用户发起的请求会发送到nginx,nginx接收到所有的数据后在转发到后端的服务器,后端服务器处理完成后把数据返回给nginx,nginx在返回给用户。

由此可见如果用户发起的请求的数据比较大,或者用户端的网速比较慢,同步模式时后端服务器的连接数相对于异步模式会比较多,压力也比较大。

squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好用途。作者在具体实验环境下,利用 DNS 轮询和 Squid 反向代理技术,实现了网站的负载均衡,从而提高了网站可用性和可靠性。
现在有许多大型的门户网站如 SINA 都采用 squid 反向代理技术来加速网站的访问速度,可将不同的 URL 请求分发到后台不同的 WEB 服务器上,同时互联网用户只能看到反向代理服务器的地址,加强了网站的访问安全。
反向代理的概念
反向代理服务器又称为 WEB 加速服务器,它位于WEB 服务器的前端,充当WEB 服务器的内容缓存器。

系统结构

系统结构
反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务器的 IP 地址,这样 URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB 服务器的负载,提高了访问速度,同时避免了因用户直接与 WEB 服务器通信带来的安全隐患。
Squid 反向代理的实现原理
目前有许多反向代理软件,比较有名的有 Nginx 和 Squid 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

Squid 是由美国一项研究计划,其目的为解决网络带宽不足的问题,支持HTTP,HTTPS,FTP 等多种协议。

Squid反向代理服务器位于本地 WEB 服务器和 Internet 之间 , 组织架构如图:

客户端请求访问 WEB 服务时,DNS 将访问的域名解析为 Squid 反向代理服务器的 IP 地址,这样客户端的 URL 请求将被发送到反向代理服务器。如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。 Squid 反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。

四个最重要 HTTP 头标记:

Last-Modified: 告诉反向代理页面什么时间被修改
Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
Cache-Control: 告诉反向代理页面是否应该被缓冲
Pragma: 用来包含实现特定的指令,最常用的是 Pragma:no-cache

利用 Squid 反向代理加速网站实例
本实例的域名是 wenjin.cache.fqj.com.cn,通过DNS的轮询技术,将客户端的请求分发给其中一台 Squid 反向代理服务器处理,如果这台 Squid 缓存了用户的请求资源,则将请求的资源直接返回给用户,否则这台 Squid 将没有缓存的请求根据配置的规则发送给邻居 Squid 和后台的 WEB 服务器处理,这样既减轻后台 WEB 服务器的负载,又提高整个网站的性能和安全性。该系统结构图:

配置系统环境:
一台 DNS 服务器:操作系统Centos6.4,软件 BIND 9.5,IP 192.168.76.222 ;
三台 Squid 服务器:操作系统 Centos6.4,软件 Squid 3.0,相应的 IP 如下:
Squid1:192.168.76.223
Squid2:192.168.76.224
Squid3:192.168.76.225
三台 WEB 服务器:操作系统Centos6.4,应用软件 apache+Mysql,相应的 IP 地址如下:
webServer1:210.82.118.195
webServer2:192.168.76.226
webServer1:192.168.76.227

配置 DNS 服务器
软件利用 centos6.4自带的 bind 软件。然后针对该系统配置 bind,首先修改 bind 配置文件 /etc/namedb/named.conf,在文件中添加
复制代码 代码如下:zone "cache.xxx.com.cn"{
type master;
file "master/ cache.fqj.com.cn ";
};

再在 /etc/namedb/master 目录下添加 cache.fqj.com.cn 文件,该文件的内容如下:
复制代码 代码如下:$TTL3600
@   IN  SOA search. xxx.com.cn. root. xxx.com.cn.  (
20080807; Serial
3600; Refresh
900 ; Retry
3600000 ; Expire
3600 )  ; Minimum
IN  NS  search.xxx.com.cn.
1   IN  PTR localhost.xxx.com.cn.
wenjin  IN  A   192.168.76.223
wenjin  IN  A   192.168.76.224
wenjin  IN  A   192.168.76.225

这样当用户请求的时候,DNS 通过轮询机制将 wenjin.cache.fqj.com.cn 的域名解析为 192.168.76.223、192.168.76.224 和 192.168.76.225 其中之一。
配置完成后,启动 bind 服务。

可在 /etc/rc.conf 中设置 named_enable="YES" 使得开机自启动。
用 pf -ex | grep named 查看 bind 服务是否起来;
用 nslookup wenjin.cache.fqj.com.cn 测试 bind 服务是否正常运行。

配置 Squid1 服务器

下载squid-3.4.0.3.tar.gz软件包

https://launchpad.net/squid/3.4/3.4.0.3/+download/squid-3.4.0.3.tar.gz

安装依赖包:yum install -y gcc gcc-c++ make perl perl-devel

tar zxvf squid-3.4.0.3.tar.gz

./configure --prefix=/usr/local/squid

make && make install

groupadd squid

useradd -g squid -s /sbin/nologin squid

chown -R squid /usr/local/squid/var/logs/ /usr/local/squid/var/cache/

配置squid反向代理

清除默认配置,添加自定义的配置:

cache_effective_user squid
     cache_effective_group squid

######### 设定 squid 的主机名 , 如无此项 squid 将无法启动
visible_hostname squid1.nlc.gov.cn
############# 配置 squid 为加速模式 #################
http_port 80 accel vhost vport
icp_port 3130
##### 配置 squid2、squid3 为其邻居,当 squid1 在其缓存中没有找到请求资源时, 通过 ICP 查询去其邻居中取得缓存 .

cache_peer squid2.xxx.com.cn sibling 80 3130

cache_peer squid3.xxx.com.cn sibling 80 3130

##### squid1 的三个父节点,originserver 参数指明是源服务器,

round-robin  参数指明 squid 通过轮询方式将请求分发到其中一台父节点;
      squid 同时会对这些父节点的健康状态进行检查,如果父节点 down 了,那么 squid 会从剩余origin 服务器中抓取数据.
      cache_peer 210.82.118.195 parent 8080 0 no-query originserver round-robin name=webServer1
      cache_peer 192.168.76.226 parent 8080 0 no-query originserver round-robin  name=webServer2
      cache_peer 192.168.76.227 parent 8080 0 no-query originserver round-robin  name=webServer3

#### 将 wenjin.cache.xxx.com.cn 域的请求通过 RR 轮询方式转发到三个父节点中的一个
     cache_peer_domain webServer1 webServer2 webServer3 wenjin.cache.xxx.com.cn

##### 下面是一些访问控制、日志和缓存目录的设置
      acl localnet src 192.168.76.223 192.168.76.224 192.168.76.225
      http_access allow all
      icp_access allow localnet
      cache_log /usr/local/squid/var/logs/cache.log
      access_log /usr/local/squid/var/logs/access.log squid
      cache_dir ufs /usr/local/squid/var/cache/ 1000 16 256

####### 对 squid 的一些优化 ###############
     maximum_object_size 10240 KB  ### 能缓存的最大对象为 10M
     maximum_object_size_in_memory 512 KB ### 内存中缓存的最大对象 512K
     cache_mem 256 MB  ###squid 用于缓存的内存量,最后进行保存

在 /etc/hosts 文件中添加

192.168.76.223  squid1.xxx.com.cn
      192.168.76.224  squid2.xxx.com.cn
      192.168.76.225  squid3.xxx.com.cn保存

维护命令

/usr/local/squid/sbin/squid -s #启动squid

/usr/local/squid/sbin/squid –k parse #检查squid配置文件是否正确

/usr/local/squid/sbin/squid –N -z #生成缓存目录

配置 squid2 和 squid3 服务器
     squid2 和 squid3 配置方法和配置参数和 squid1 一样,配置完成后,分别启动这两个服务器上的 squid 服务。

在 squid 日志文件 cache.log 中,出现如下日志信息则说明三台 squid 之间成功配置为 sibling,且配置了三个父代理。
     2013/11/17 10:08:47| Configuring Sibling squid1.xxx.com.cn/80/3130
     2013/11/17 10:08:47| Configuring Sibling squid3.xxx.com.cn/80/3130
     2013/11/17 10:08:47| Configuring Parent 210.82.118.195/8080/0
     2013/11/17 10:08:47| Configuring Parent 192.168.76.226/8080/0

2013/11/17 10:08:47| Configuring Parent 192.168.76.227/8080/0
     2013/11/17 10:08:47| Ready to serve requests.

进行测试
   测试之前,保证 DNS 服务、三台 squid 服务和三台 web 服务都正常起来。在客户端输入       http://wenjin.cache.xxx.com.cn,

则正确的显示该网页。服务器端的响应对客户端是透明的,客户端不知道请求是由哪台 WEB 服务器处理的;而且其中某       台 Squid 服务器或 WEB 服务器发生故障,也不影响服务的正常运行。

测试命中率:

这里-p后面根的是端口,根据自己具体的情况而定。如果是3128端口,就把上面的80换成3128就可以了

[root@test01 ~]# /usr/local/squid/bin/squidclient -p 80 mgr:info

Sending HTTP request ... done.

HTTP/1.1 200 OK

Server: squid/3.4.0.3

X-Cache: MISS from www.eshow365.com

Via: 1.1 www.eshow365.com (squid/3.4.0.3)

Connection: close

Average HTTP requests per minute since start:5.9          #每分钟http request的数量

Average ICP messages per minute since start:0.0

Select loop called: 7788 times, 477.226 ms avg

Cache information for squid:

Hits as % of all requests:5min: 0.0%, 60min: 16.3%        #Cache Request命中率

Hits as % of bytes sent:5min: -0.0%, 60min: 24.6%         #Cache Byte命中率

Memory hits as % of hit requests:5min: 0.0%, 60min: 0.0%

Disk hits as % of hit requests:5min: 0.0%, 60min: 97.3%

Storage Swap size:3660 KB                  #存放cache的硬盘使用大小

Storage Swap capacity: 0.4% used, 99.6% free

Storage Mem size:2864 KB          #存放cache的内存使用大小

Storage Mem capacity: 1.1% used, 98.9% free

Mean Object Size:17.18 KB

Requests given to unlinkd:0

Median Service Times (seconds)  5 min    60 min:

HTTP Requests (All):   0.00000  0.28853

Cache Misses:          0.00000  0.30459

Cache Hits:            0.00000  0.00000

Near Hits:             0.00000  0.00000

Not-Modified Replies:  0.00000  0.00000

DNS Lookups:           0.00000  0.00000

ICP Queries:           0.00000  0.00000

Resource usage for squid:

UP Time:3716.636 seconds

CPU Time:1.097 seconds

CPU Usage:0.03%

CPU Usage, 5 minute avg:0.01%

CPU Usage, 60 minute avg:0.02%

Process Data Segment Size via sbrk(): 8264 KB

Maximum Resident Size: 55472 KB

Page faults with physical i/o: 0

Memory usage for squid via mallinfo():

Total space in arena:    8396 KB

Ordinary blocks:         8254 KB     51 blks

Small blocks:               0 KB      0 blks

Holding blocks:           656 KB      2 blks

Free Small blocks:          0 KB

Free Ordinary blocks:     142 KB

Total in use:             142 KB 2%

Total free:               142 KB 2%

Total size:              9052 KB

Memory accounted for:          #内存使用情况

Total accounted:         3762 KB  42%

memPool accounted:       3762 KB  42%

memPool unaccounted:     5290 KB  58%

memPoolAlloc calls:     79957

memPoolFree calls:      80460

File descriptor usage for squid:

Maximum number of file descriptors:   1024     #系统最大file descriptor数

Largest file desc currently in use:     18     #目前使用file descriptor最大值

Number of file desc currently in use:   10     #目前正在使用的file descriptor数

Files queued for open:                   0

Available number of file descriptors: 1014

Reserved number of file descriptors:   100

Store Disk files open:                   0

Internal Data Structures:

265 StoreEntries       #Cache中存放的 object 的数量

219 StoreEntries with MemObjects     #内存中 object 数量

218 Hot Object Cache Items    #热点object 的数量

213 on-disk objects           # 硬盘上的object的数量

从访问日志中查看命中情况

[root@test01 ~]# tail -f /usr/local/squid/var/logs/access.log | grep HIT

1386753542.844      4 180.153.223.26 TCP_MEM_HIT/200 60317 GET http://www.eshow365.com/guowai/country-381.html - HIER_NONE/- text/html

常用的squidclient查询语句如下:

squidclient -p 80 mgr:info      #取得squid运行状态信息:

squidclient -p 80 mgr:mem     #取得squid内存使用情况:

squidclient -p 80 mgr:objects #取得squid已经缓存的列表,使用时要小心,可能会造成squid崩溃:

squidclient -p 80 mgr:diskd  #取得squid的磁盘使用情况:

squidclient -p 80-m PURGE http://www.361way.com  #强制更新某个url,即清理某连接的squid

学习总结

利用三台 squid 反向代理服务器加速了网站的性能,同时结合 DNS 轮询技术实现了网站的负载均衡。

参考:http://my.oschina.net/davehe/blog/109922

http://zyan.cc/book/squid/

配置Squid透明代理服务器,使局域网内客户机通过代理服务器上网

外网           IP:192.168.21.160   eth0

内网IP:192.168.237.160  eth1

安装Squid软件,配置透明代理服务器,使内部网段192.168.237.0/24内的客户机通过代理服务器192.168.21.160访问外网并且做以下策略限制
1、禁止所有客户机访问www.abc.com域名
2、禁止IP地址为192.168.237.131的客户机访问外网
3、禁止所有用户访问IP地址为192.168.237.129的网站
4、禁止所有用户访问域名中包含有163.com的网站
5、禁止192.168.237.0/24这个网段所有的客户机在周一到周五的18:00-21:00上网
6、禁止客户机下载*.mp3、*.exe、*.zip和*.rar类型的文件

2、设置防火墙端口转发规则
   iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128  #开启端口转发功能,把内网eth1的80端口转发到外网eth0的3128端口
   iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  #开启外网eth0的NAT网络地址转换功能
   service iptables save  #保存规则
   /etc/init.d/iptables restart  #重启防火墙
3、修改主机的路由模式
   vi /etc/sysctl.conf
   net.ipv4.ip_forward = 1    #0为关闭,1为开启路由 使用sysctl -p 命令查看
安装开始
1、安装Squid
   yum install squid   #安装(Squid 2.6)
   service squid start #启动
   chkconfig squid on  #设置开机启动
2、配置Squid

vi  /etc/squid/squid.conf  #编辑文件
http_port 3128 transparent
cache_mem 128 MB
cache_dir ufs /var/spool/squid 4096 16 256
cache_effective_user squid  #设置用户
cache_effective_group squid  #设置用户组
access_log /var/log/squid/access.log   #设置访问日志文件
cache_log /var/log/squid/cache.log  #设置缓存日志文件
cache_store_log /var/log/squid/store.log  #设置缓存记录文件
visible_hostname cdn.abc.com  #设置squid服务器主机名
cache_mgr lingvven@163.com
acl all src 0.0.0.0/0.0.0.0  #设置访问控制列表,默认开启
http_access allow all
acl client dstdomain -i www.abc.com    #找到TAG: acl标签,在其最后添加下面内容
http_access deny client  #禁止所有客户机访问www.abc.com域名
acl client131 src 192.168.237.131  #禁止IP地址为192.168.237.131的客户机访问外网
http_access deny client131
acl client129 dst 192.168.237.129  #禁止所有用户访问IP地址为192.168.237.129的网站
http_access deny client129
acl client163 url_regex -i 163.com  #禁止所有用户访问域名中包含有163.com的网站
http_access deny client163
acl clientdate src 192.168.237.0/255.255.255.0  #禁止这个网段所有的客户机在周一到周五的18:00-21:00上网
acl worktime time MTWHF 18:00-21:00
http_access deny clientdate worktime
acl clientxiazai urlpath_regex -i \.mp3$  \.exe$  \.zip$  \.rar$
http_access deny clientxiazai  #禁止客户机下载*.mp3、*.exe、*.zip和*.rar类型的文件
service squid stop  #停止
/usr/sbin/squid  -z  #初始化cache缓存目录
service squid start #启动
service squid restart #重启
备注:访问控制应用实例

acl clientall src 192.168.237.0/255.255.255.0  #禁止192.168.237.0这个子网里所有的客户机上网

http_access deny clientall
acl urlsex url_regex -i sex   #禁止用户访问域名包含有sex关键字的URL
http_access deny urlsex
acl client132 src 192.168.237.132  #限制IP地址为192.168.237.132的客户机并发最大连接数为5
acl conn5 maxconn 5
http_access deny client132 conn5

客户机设置:

打开客户机的本地连接设置
IP:192.168.237.130 (同一个网段的ip都可以)
子网掩码:255.255.255.0
网关:192.168.237.160 (Squid代理服务器的内网eth1地址)
DNS:8.8.8.8
备用DNS:8.8.4.4
配置完成,现在内部网段192.168.237.0/24内的客户机可以通过代理服务器192.168.21.160访问外网了。

转载于:https://blog.51cto.com/hao360/1339465

squid反向代理作为web前端内容缓存器及局域网内客户机通过代理服务器上网相关推荐

  1. Squid反向代理加速WEB

    简介: Linux 下著名代理软件Squid, 通常被用作上网代理,比如代理内网的Web服务,起到加速浏览的作用,一般可以设为透明代理. 透明代理设置主要有: ACL设置 acl all src 0. ...

  2. 利用Squid反向代理搭建CDN缓存服务器加快Web访问速度

    案例: Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入 访问用户:电信宽带用户.移动宽带用户 出现问题:电信用户打开www.abc.com正常,移动用户打 ...

  3. 基于反向代理的Web缓存应用-可缓存的CMS系统设计

    基于反向代理的Web缓存加速     --可缓存的CMS系统设计 作者: 车东 Email: chedongATbigfoot.com/chedongATchedong.com 写于:2003/05 ...

  4. 利用 squid 反向代理提高网站性能

    本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性.安全性方面有很好的用途.作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术, ...

  5. Linux下DNS轮询与Squid反向代理结合

    一.安装反向代理服务器 1.下载反向代理服务器软件采用squid,下载地址: http://www.squid-cache.org/Versions/v2/2.2/squid-2.2.STABLE5- ...

  6. Squid服务器应用(Squid传统代理、Squid透明代理、ACL访问控制、Squid日志分析、Squid反向代理)

    文章目录 一.缓存代理概述 二.Squid代理服务器 三.代理的工作机制 四.Squid代理的类型 五.部署Squid代理服务器步骤 (一).安装Squid服务 (二).构建传统代理服务器 (三).构 ...

  7. Squid 反向代理服务器配置

    Squid 反向代理服务器配置 简介: Squid 反向代理常用于服务器端,客户端访问 Squid 代理服务器的 80 端口,Squid 代理服务器根据配置去请求后端的 web 服务器,    然后将 ...

  8. Squid ----反向代理模式

    Squid ----反向代理模式 一:定义 ​ Squid作为代理服务软件,其主要功能是使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,有一定的安全性,但是如果想让互联上 ...

  9. 部署Squid代理服务器 —— 反向代理(acl 访问控制 、sarg 日志分析、 Squid反向代理) —— 再续前缘..

    部署Squid代理服务器 -- 反向代理 前言 部署前规划 acl 访问控制 sarg 日志分析 反向代理 前言 部署 Squid 代理服务的正向代理,咱们已经实现 可以参考前文 Squid ---- ...

最新文章

  1. ORB_SLAM2程序入口(System.cc)
  2. 5G 产业链重要投资节点
  3. 爬虫利器 puppeteer
  4. JS中this关键字
  5. Nginx关于浏览器缓存相关的配置指令
  6. python numpy矩阵索引_python – Numpy中的矩阵索引
  7. 进制转换c语言代码_奇怪的C语言代码,有些函数在变量前加上(void)是什么类型转换?...
  8. MacOS下IDEA设置智能提示不区分大小写
  9. 如何利用自己的知识设计一块属于自己的单片机开发板
  10. Android系统源码分析--Context
  11. 高性能迷你React框架anu发布
  12. RH850F1x Starter Kit V3用户手册(中文翻译版)
  13. 筛选中很容易粘贴到被隐藏部分_在Excel中粘贴时如何跳过隐藏行
  14. No tracked branch configured for branch master or the branch doesn‘t exist. To make your branch trac
  15. 如何寻找“真爱”型合伙人
  16. 项目管理-4-运筹帷幄
  17. 2020年中国透明聚丙烯(TPP)行业概况:仍有较大市场空间 [图]
  18. Because You Loved Me歌词
  19. 扯淡之——世界上先有鸡还是先有鸡蛋
  20. f5 gtm 工作原理_[转]F5负载均衡算法及基本原理

热门文章

  1. Java类型摩擦,CRH380BL动车组常采用(? ? ?)与摩擦制动的复合制动模式。
  2. 「季淳卿」MyBatis学习总结
  3. python椭圆代码_Python实现霍夫圆和椭圆变换代码详解
  4. 网络的宽度如何影响深度学习模型的性能?
  5. win10开启wifi热点
  6. 01Linux系统管理-Linux简介
  7. 3d模型 vv5_WEY VV5正面对战现代ix35!网友:胜负已分
  8. 第五人格8月8日服务器维护几小时,第五人格6月8日无法登陆是怎么回事
  9. w计算机二级word单选题,2017全国计算机二级MS-Office选择题题库大全.pdf
  10. 如果你已经裸辞了,找不到工作,可以试试我的这个方法