Squid实现反向代理的方法

简介:
理服务器是使用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受外部网主机的攻击。但是,如果想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机攻击,一般的代理服务是不能实现的,需要使用反向代理来实现。
  本文将详细介绍反向代理服务的概念以及如何利用反向代理服务器提高WEB服务器的性能和安全性。
  一.反向代理的概念
  什么是反向代理呢?其实,反向代理也就是通常所说的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服务器的负担,提高访问速度。
  二.        反向代理和其它代理的比较
  下面将对几种典型的代理服务作一个简单的比较。在网络上常见的代理服务器有三种:
  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页面时不会在反向代理服务器缓存的
   四.代理服务器软件squid简介
  Squid Internet Object Cache (Harvest Project的后续版本) 是美国政府大力助的一项研究计划,其目的为解决网络带宽不足的问题,是现在Unix系统上使用者最多功能也最完整的一套软体。Apache和Netscape虽附有相关的Proxy模块,但因其功能简单而不够普及。有关squid的详细说明可到squid网站([url]http://www.squid-cache.org[/url])查询。
Squid最典型的应用是代理局域网的机器联入互联网,它支持现在流行的网络协议。Squid的另一项非常出色的功能就是实现反向代理功能。
  五.使用Squid配置反向代理(HTTP 加速器)
  通过squid配置反向代理主要就是配置“squid.conf”这个配置文件。下面以Linux操作系统为例进行介绍,其它版本的在UNIX也同样适用。在Linux中squid如果是以源代码方式安装的话,这个文件一般在“/usr/local/squid/etc/”目录下。如果是系统自带的squid,一般配置文件在“/etc/squid/”目录下。

1. Squid反向代理单个后台WEB服务器
  如果WEB服务器和反向代理服务器是两台单独的机器(一般的反向代理应该有两块网卡分别连接了内外部网络)。那么,应该修改下面的内容来设置反向代理服务。
http_port 80 # squid监听的端口
cache_peer 192.168.6.101 parent 80 0 no-query originserver 如果WEB服务器和反向代理服务器是同一台机器。 那么,应该设置WEB服务器的监听端口为非80端口(比如:81端口)。要修改的内容如下:
cache_peer 192.168.6.101 parent 81 0 no-query originserver
    
我们可以用Squid反向代理多个后台WEB服务器。例如:我们可以配置squid同时反向代理[url]www.abc.com[/url], [url]www.xyz.com[/url],  [url]www.lmn.com[/url]三个后台WEB服务器,示意图如下:
Squid的配置如下:
cache_peer 192.168.6.101 parent 80 0 no-query originserver  
#cache_peer 192.168.1.55 parent 80 0 no-query originserver name=my55
#cache_peer 192.168.1.88 parent 80 0 no-query originserver name=my88
#cache_peer_domain master .xxx1.com .xxx2.com .xxx3.cn .xxx4.com .xxx5.cn .xxx6.com .xxx7.cn
#cache_peer_domain my55 test.xxx8.com
#cache_peer_domain my88 test2.xxx8.co
  使三个域名都指向反向代理服务器的IP地址202.102.240.74。
下面设置反向代理所需要的DNS入口信息(即设置内部DNS,仅仅是squid在内部使用,Internet用户不可见)。有两种方法可以设置内部DNS,使用内部DNS服务器来解析或者使用/etc/hosts文件来实现。
 
  结论
  通过本文中的论述和相关实例,可以看出,反向代理方式不单是一种WEB服务器加速器,而且使也一种对外提供Web发布时使用的有效的防火墙技术,使用它不但能节约紧缺的IP地址资源,加速WEB服务器的访问速度,而且能够保护WEB主机,因此能够适应多种应用场合。
 
再此贴一下我简单的配置,高手请高抬贵手不要乱骂人。。哈哈
cache_mem 256 MB
cache_dir ufs /squid2/cache0 2048 16 256
half_closed_clients off
cache_swap_low 95
cache_swap_high 98
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 8 KB
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
cache_swap_log /var/log/squid/swap.log
logfile_rotate 3
http_port 192.168.6.5:80 vhost vport
cache_vary on
#url_rewrite_host_header on
#acl OverConnLimit maxconn 50
#http_access deny OverConnLimit
acl Manager proto cache_object
acl Localhost src 127.0.0.1 192.168.6.101
http_access allow Manager Localhost
http_access deny Manager
acl all src 0/0
acl LAN src 192.168.6.0/24 
acl manager proto cache_object
acl Safe_ports port 80 

http_access allow LAN
http_access deny !Safe_ports
http_access allow all
visible_hostname xxx1.com
cache_mgr  [email]root@xxx1.com[/email]
cache_effective_user squid
cache_effective_group squid
tcp_recv_bufsize 65535 bytes
acl QUERY urlpath_regex cgi-bin .php .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe
cache deny QUERY
cache_peer 192.168.6.101 parent 80 0 no-query originserver 
#cache_peer 192.168.1.55 parent 80 0 no-query originserver name=my55
#cache_peer 192.168.1.88 parent 80 0 no-query originserver name=my88
#cache_peer_domain master .xxx1.com .xxx2.com .xxx3.cn .xxx4.com .xxx5.cn .xxx6.com .xxx7.cn 
#cache_peer_domain my55 test.xxx8.com
#cache_peer_domain my88 test2.xxx8.com
error_directory /usr/local/etc/squid/errors/Simplify_Chinese
#icp_port 0


本文转自Deidara 51CTO博客,原文链接:http://blog.51cto.com/deidara/87198,如需转载请自行联系原作者
相关文章
|
3天前
|
缓存 Ubuntu Python
Squid中正向代理的配置与使用
Squid中正向代理的配置与使用
|
7月前
|
应用服务中间件 nginx
Nginx正向代理与反向代理
Nginx正向代理与反向代理
113 0
|
9月前
|
Unix 应用服务中间件 nginx
nginx和正向代理反向代理
nginx和正向代理反向代理
54 0
|
10月前
|
域名解析 存储 缓存
Squid代理服务器
Squid代理服务器
341 0
|
10月前
|
负载均衡 算法 安全
Nginx 正向代理和反向代理
Nginx是一个轻量级的Web服务器,它使用少量的系统资源来处理大量的并发连接请求.....
11875 2
Nginx 正向代理和反向代理
|
缓存 应用服务中间件 开发工具
squid反向代理
squid反向代理
|
缓存 网络安全
squid 代理服务器应用(上)
Squid 主要提供缓存加速、应用层过滤控制的功能。
squid 代理服务器应用(上)
|
缓存 监控 安全
squid 代理服务器应用(下)
定位是缓存加速 缓存从后端的web服务器获取到的 加速是为了客户端访问的 squid 三种模式: 传统代理 需要客户端指向squid代理服务器,客户端能感知到squid代理服务器的存在 透明代理(常用) 客户端不需要配置,只要直接访问即可,服务端,借助了防火墙规则及静态路由的方式,完成透明代理 反向代理 做为类似与Nginx服务器的反向代理功能,但自身不需要一个首页,基于IP:端口,权重的方式完成反向 代理 对于Squid自身的管理/功能 : ACL:主要做的是http access (基于http协议,access访问) 的允许和拒绝管理 sarg:日志分析功能,可以以天的方式指定将ac
squid 代理服务器应用(下)
|
负载均衡 应用服务中间件 nginx
nginx反向代理与正向代理
nginx反向代理与正向代理 1 正向代理 正向代理: 原因是 客户端 ---X--- 网站,客户端不能直接访问某个网站 解决: 客户端 ----> 代理服务器(发起访问请求) ----> ...
|
网络协议 缓存 开发工具