$7.49 .com domain with free InstantPage Website Builder$1.99 Web Hosting   捷飞网络官方淘宝店   Godaddy 优惠码
返回列表 发帖
分享到:




[Tools] linux下squid的 配置教程及案例

官方网站:http://www.squid-cache.org/$ o1 ~6 ]$ S; [4 G$ F" U+ A1 ?( B

0 M# _: W4 ]( T  _7 b相关技术网站:http://www.visolve.com/
- f2 S. \6 c' W6 M7 d一. 代理服务简介0 i: W5 r; ?8 A: c1 ^5 m- A
返回 1. 什么是代理服务器(Proxy Server)
& s" [; F+ o, [- L! X, p1 t; C5 L    代理服务可以代表其它计算机传递数据包或信息,这些数据包和信息包括网页、电子邮件、多媒体文件和其它网络应用程序等。通过它的文件缓存和访问控制等功能,可以实现快速浏览和对用户访问的有效管理。; y4 h  I; F4 R/ u
    Web代理服务器(通常所说的代理服务器)是介于浏览器和Web服务器之间的一台服务器,当你通过代理服务器上网浏览时,浏览器不是直接到 Web服务器去取回网页而是向代理服务器发出请求,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。
. v" \# R; m! H, W 更重要的是:代理服务器是 Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联 (OSI) 模型的对话层。主要的功能有:  s- e3 g& R$ \5 G' O7 _
   ; |- V  E0 j# r9 I- N5 W
  1、连接Internet与Intranet 充当firewall(防火墙):因为所有内部网的用户通过代理服务器访问外界时,只映射为一个IP地址,所以外界不能直接访问到内部网;同时可以设置 IP地址过滤,限制内部网对外部的访问权限;另外,两个没有互联的内部网,也可以通过第三方的代理服务器进行互联来交换信息。
) k/ N8 E9 _8 z+ ~) Y  2、共享因特网连接,节省IP开销:如前面所讲,所有用户对外只占用一个IP,所以不必租用过多的IP地址,降低网络的维护成本。这样,局域局内没有与外网相连的众多机器就可以通过内网的一台代理服务器连接到外网,大大减少费用。当然也有它不利的一面,如许多网络黑客通过这种方法隐藏自己的真实 IP地址,而逃过监视。+ V& g, x- Q( b, S6 m
  3、提高访问速度,节约通信带宽。而且通常代理服务器都设置一个较大的硬盘缓冲区(可能高达几个GB或更大),当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,从而达到提高访问速度的目的。2. 代理服务器的硬件需求
1 f, T" Q+ f3 [代理服务器对于硬件的要求相当的高!因为我们架设代理服务器的目的就是希望能够加快网络的传输速度因此,虽然代理服务器几乎在任何的 Linux 系统上面都能跑,但是代理服务器最好还是有较高的硬件配置:
5 p+ G  n# e! JCPU 足够好;
# k8 y3 A9 B8 H$ w% K$ PRAM 足够大,这也是很重要的一个硬件参数 * }8 K) j! B9 J' P2 Y: _( L
Hard Disk 最好能用 SCSI 接口的,因为速度与稳定度都比较好!如果不能的话,那么 IDE 接口的硬盘由于目前速度也越来越快,所以使用 IDE 也没有问题,但是最好是『多块硬盘』的架构,例如我总共需要 30 GB 的硬盘空间,那么最好是 10 GB 的硬盘三块这样的架构较佳。最好在架设代理服务器时,将整体主机的规划做好,并且让代理服务器主机的服务单纯一点,最好只负责代理服务
9 r1 G7 v; B* m( s! `2 i9 k每颗硬盘的容量不需要太大,此外,最好将硬盘分割一下,一个分区在 2~4 GB 之间即可,因为分太大的话资料的搜寻耗费时间较长,但是分区太小又可能造成空间的浪费! Z0 f- X9 l1 c0 T: C. f
cache 是放置在某个目录下的,而最好一个目录底下就是独立的一个partition 。此外,由于 cache 所在的硬盘常常会有资料的存取,因此可能此一硬盘的损耗率会比较大,所以这个 cache 所在的硬盘最好不要跟重要数据文件,例如 /, /etc, /usr, /home 等等重要的系统文件放在一起!
* Z( M" D" G. x  R+ ]8 I也由于 cache 所在的硬盘资料存取太密集了,所以,硬盘的选择上面需要 (1)转速不能太低; (2)磁头的机械臂需要可以忍受频繁的动作;(3)发热量不可太大,或者可以考虑加装硬盘用风扇。
) b5 {9 P9 L1 o网络卡与网络周边最好使用 GBytes 的网络卡3. 使用squid的好处
' q/ O' g; H' e3 O* psquid是开源软件,性能优秀。并仍在世界各地的squid开发者的共同努力下,不断发展。
8 w( S8 m% j, e6 q4 k; F2 y快速响应,减少网络阻塞,Squid将远程Internet对象保存为本地拷贝。当本地用户再次访问这些对象时,Squid可以直接快速地提供对这些对象的访问,而不必再次占用带宽访问远程服务器上的对象。. _& `( r: g3 i# A" Q' I
增强访问控制,提高安全性。可以针对特定的的网站、用户、网络、数据类型实施访问控制( ^& c" t$ ]- c: ~
squid可以工作在普通代理模式、透明代理模式各反向代理模式4. squid的结构1 w8 u' l) x( i- S- I0 A
多个squid代理服务器可以通过icp协议相互沟通,形成树形层次关系(父代理、兄弟代理、子代理),构建代理服务器群。二. squid.conf的典型配置(普通代理)' O& Q/ y8 `5 w' a2 Z# [3 Q, W* [
返回 1. 配置
& s( [- m8 Y9 O4 A: y#vi /etc/squid/squid.conf
5 z: S* S* Q3 {#http_port指令告诉squid在哪个端口侦听HTTP请求。默认端口是3128,除下面的形式外,也可以是http_port 192.168.63.50:3128
5 r; k3 Q# |9 p2 uhttp_port 31287 K7 A( S  \# z% p. c
icp_port 3130
0 I) N: e6 `5 ]' B#缓存目录的设置,可以设置多个缓存目录,语法为:<cache_dir> <aufs|ufs> <目录所在> <MBytes大小> <dir1> <dir2>
1 F) p; d% s- W* b$ M$ h+ P' g) lcache_dir ufs /var/spool/squid 1000 64 1024 + p' I5 b) r- p9 \+ C6 s
#下面是关于日志文件的放置目录与文件名!3 j! g6 U; y+ I, @3 b+ `
cache_access_log /var/log/squid/access.log
+ \% G: k  u/ d/ X9 w0 r1 xcache_log /var/log/squid/cache.log
7 {$ M2 [% x& U1 ?cache_store_log /var/log/squid/store.log4 v" S: j& @( ]: e+ L2 `1 _4 t
pid_filename /var/run/squid.pid; I* u/ `* g/ f2 G1 Z! n
#关闭认证机制,有些版本的 squid 会自动的加入代理认证机制,而普通情况下是不需要的,故找到包括auth_param的行,给它们加上注释  u! \0 o% B1 [/ u; q
#auth_param basic children 5; ?0 T6 b( |+ z. P* k7 M. ~/ w
#auth_param basic realm Squid proxy-caching web server0 L; \) f& Z4 j; O- \3 h
#auth_param basic credentialsttl 2 hours8 {. N- o4 Y; J  B
#设置squid用户及用户组、管理员账号
# r9 g) m1 P8 W7 A8 p# k6 z8 Qcache_effective_user squid
8 S( M, R  ~  P& ]9 Zcache_effective_group squid   z  @; S1 R" _' B- Q7 m
cache_mgr youraccount@your.e.mail' G! D2 w: C9 ?
# 与内存有关的配置:因为我的系统内存很小,所以只给 8 MB!如果您的物理内存很大的情况下,例如 512 MB,可以考虑加大到 64 或 128 MB。: z$ j% n- o5 Z, ^" D2 I" ]
cache_mem 128 MB2 r! m, N! n3 w: J

0 o+ k" u, ]) V" [9 E4 S) ^& K# 与磁盘容量有关的配置(注:下列的 90 与 95 是百分比 ),如果您的 cache_dir 所在磁盘很大时,可以考虑将 4096 改成 32768 KB7 g' n9 E" H. {3 f3 G8 ?% M
cache_swap_low 90
( o. a/ L# s+ M1 g- F( F: }cache_swap_high 95; v, p. }, H. m: O6 o. U
maximum_object_size 4096 KB
: A6 |3 t  W) |' n2 w: h& `) Q. U4 e/ b: q, x
# 与内存保存资料有关的配置
! B! B4 V8 e2 t) n8 y# Rmaximum_object_size_in_memory 8 KB/ [- q. a# Q, f# }# K

2 b. I& U; V' D8 m: J" Q! x! P#定义acl(访问控制列表), 语法为:acl<acl> <acl名称> <acl类型> <配置的内容>3 n. u+ g5 m+ ]7 K7 m# [) P
#黑体为用户自定义部分
- K& |2 c3 _- S  i! iacl All src 0/0 ! N- z4 D* G# w( v/ h/ ?, q* }
acl Manager proto cache_object 9 f& U" Z, P2 o3 ^
acl Localhost src 127.0.0.1/32
' b& d" G  l7 Eacl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535
& m+ o/ A" u- x' Y2 d+ l, }( \; Oacl SSL_ports 443 563 , V2 y* A0 E6 B
acl CONNECT method CONNECT
/ c' Q, D. U6 g. F4 P2 Cacl MyNetwork src 192.168.0.0/16
  k7 @% V3 u- F1 ~  a/ o. l8 |( g5 Q
#利用前面定义的acl,定义访问控制规则$ l1 O' I9 n; l# n" P
http_access allow Manager Localhost3 }% `/ Q! H  E# p0 Q. [) v
http_access deny Manager$ p% R% O; r8 [/ ]
http_access deny !Safe_ports
9 j+ p0 m9 ?8 W; B% I- _6 j* ~- whttp_access deny CONNECT !SSL_ports7 \" c8 O* ~3 ~2 h
http_access allow MyNetwork% @0 r- u8 @0 f0 }) T6 I6 D
http_access deny All' t) z- o1 e* W) e( K6 X4 ~2 a
#定义与其它代理服务器的关系,语法: <cache_peer> <主机名称> <类别> <http_port> <icp_port> <其它参数>
& _- R! o7 O' g5 ccache_peer 192.168.60.6 parent 4480 7 no-query default7 s! o; j" I/ ^7 @* ~; b- q
#设置与其它代理服务器的关系:4 a- v8 e+ y6 x9 T3 @/ V
# <cache_peer_access> <上层 Proxy > <allow|deny> <acl名称>
8 E1 |4 N' E+ Y#cache_peer_access 192.168.60.6 allow aclxxx
1 Q/ n* w  J/ Q  n" B  f$ ]#cache_peer_access 192.168.60.6 deny !aclxxx# H! ?/ d* n9 u: N) @
coredump_dir /var/spool/squid2. 激活squid3 x" D$ u* X$ d# a8 I6 h
1). 在开启squid之前,你应该验证其配置文件是否正确。运行如下命令即可:1 o' Z# ~0 v3 j  E
# squid -k parse. `( \  L* E! f* E. m" h! C
假如你看不到输出,配置文件有效,你能继续后面的步骤。然而,如果配置文件包含错误,squid会告诉你:
/ w: ~4 P5 G) p2). 初始化cache目录.即建立缓存目录的存储格式
. h! e+ B4 t1 Y/ ~只需在第一次启动squid服务之前执行(在初次运行squid之前,或者无论何时你增加了新的cache_dir,你必须初始化cache目录。)9 ~+ h* J: ?" l  h! u1 Z2 w1 w
# squid -z 6 i8 k2 L% t0 P- K+ h* T
cache目录初始化可能花费一些时间,依赖于cache目录的大小和数量,以及磁盘驱动器的速度。假如你想观察这个过程,请使用-X选项:
7 u; d$ i# u3 j5 U# squid -zX
" b! C, N# c/ \. }5 K# v& @5 N3). 启动squid服务0 e# M9 m  k  B8 M  U
# service squid start& S& U' C& H; X
假定squid安装在/usr/local/squid目录下,也可以
) d* I. n$ w" ~: P  K4 `# w3 e( p- S# /usr/local/squid/sbin/squid -sD5 U, q- j2 h' G& X" k6 n
4). 停止squid
" k( F. Q; _) _) ^6 w( A, p最安全的停止squid的方法是使用squid -k shutdown命令:
3 v( `- X* ^5 p* X& r( ~# squid -k shutdown
! ~8 t% n3 h: l# i: ]: N/ r5). 重配置运行中的squid进程1 @( D5 Z: o- [' G" ?! v& @
在你了解了更多关于squid的知识后,你会发现对squid.conf文件做了许多改动。为了让新设置生效,你可以关闭和重启squid,或者在squid运行时,重配置它。) M- J6 i7 c' j' ?1 r; a" P
重配置运行中的squid最好的方法是使用squid -k reconfigure命令:
' `8 O5 D! V; [# squid -k reconfigure
8 w# M0 u0 }+ V, A2 a. [" U6). 滚动日志文件
0 t6 K: d: g; C( j) W, V0 r除非你在squid.conf里禁止,squid会写大量的日志文件。你必须周期性的滚动日志文件,以阻止它们变得太大。squid将大量的重要信息写入日志,假如写不进去了,squid会发生错误并退出。为了合理控制磁盘空间消耗,在cron里使用如下命令:
. h7 U  y; X' y( j1 R4 ^%squid -k rotate
8 T7 v) k& \* m' z, G$ L5 m9 n6 R例如,如下任务接口在每天的早上4点滚动日志:
$ P, J0 M$ }4 W0 d. y2 J% f, i0 4 * * * /usr/local/squid/sbin/squid -k rotate
+ F4 j  w5 n% E! z( ^( d该命令做两件事。首先,它关闭当前打开的日志文件。然后,通过在文件名后加数字扩展名,它重命名cache.log,store.log,和 access.log。例如,cache.log变成cache.log.0,cache.log.0变成cache.log.1,如此继续,滚动到 logfile_rotate选项指定的值。
3 {2 y, ^1 T. u9 [' ]% [squid仅仅保存每个日志文件的最后logfile_rotate版本。更老的版本在重命名过程中被删除。假如你想保存更多的拷贝,你需要增加logfile_rotate限制,或者编写脚本用于将日志文件移动到其他位置。 请见13.7章关于滚动日志的其他信息。3. 访问控制示例
% r- n5 P2 U' A; Q9 n6 V$ D5 R1) 禁止访问某个网站5 q9 p" W# G8 X8 ~
在squid配置文件中添加以下acl名称及访问规则,并重新加载配置文件
3 C% [0 [" S0 S4 n. |acl sina dstdomain .sina.com.cn .sina.com+ L) L2 c: ^+ U) _3 @
http_access deny sina
% c) X# a2 T6 J+ `. Q1 \% Q
4 J% D- G* Q0 u0 D' ]acl sina dst 58.63.236.26 58.63.236.27 58.63.236.28 58.63.236.29 58.63.236.30 58.63.236.31 58.63.236.32 58.63.236.33 58.63.236.34 58.63.236.35 58.63.236.36 58.63.236.37 58.63.236.38 58.63.236.39 58.63.236.49 58.63.236.50
5 e* V; J5 v, ^$ ], L. c* x5 Dhttp_access deny sina  u2 S& Q. P/ k" g

5 c( f) u: _2 W# \6 n/ Zacl sina dst www.sina.com.cn. m" W5 g* i6 l: Z5 ?  w: T- O
http_access deny sina
2 j- [3 e; z- u$ M7 P2) 禁止来自某些IP地址的访问
0 j: E) Q6 g' J7 N* I; D在squid配置文件中添加以下acl名称及访问规则,并重新加载配置文件
* o, n! n5 A* k. P1 C+ ]acl zhang src 192.168.63.6/32
, X$ @1 f) g$ Yhttp_access deny zhang
; _, ]7 F7 x. L( ]1 x" f1 |3) 禁止在某些时段访问
8 R5 r* l3 H0 |  n, R* }, Zacl Working_hours MTWHF 08:00-17:00' A+ T  Z' D5 Q& J1 g  l4 K
http_access allow Working_hours1 Q  c, c" E2 _0 L
http_access deny !Working_hours
  ^" m+ q0 o( u9 g4) 禁止某个代理客户建立过多连接
3 j' C* _! ?4 {( j/ N1 Xacl OverConnLimit maxconn 4 3 B+ j- N% T1 B' _2 e2 G
http_access deny OverConnLimit三. 透明代理" x/ A# x/ \6 m* c! J: Q# i5 E1 e3 G
返回
" o( a* i8 S# G, r. _6 u* I让我们现在来想象一个联机状态,就是你有一整组内部网络,而这个内部网络都是透过 NAT 主机联机出去的。那么我们谈过,就是在一个内部网很大的情况下,使用 Proxy 是一个很不错的选择,因为至少他可以减轻带宽负荷!不过,遗憾的是,架设 Proxy 的时候,也要使用者在浏览器上面设置代理!那么有没有办法在『使用者不需要在浏览器上面进行任何配置,就可以实现以 Proxy 帮助使用者联接Internet?当然有啦!那就是 Transparent Proxy 啦!也有人翻译成『透明代理服务器』,其原理是:. U+ C( p3 P- c8 J
当使用者经过 NAT 服务器来联机进入 Internet 时,假如使用的 Internet 协议为 80 (也就是 WWW) ,那么就将这个要求交给 Proxy 来工作,以达到代理服务器的功能。
$ T2 C, A+ x# R  S. G& j6 w; t2 F  s, `! Q. Y- G3 o
呵呵!也就是说,当使用者是经过 NAT 主机联机出去时,只要让 NAT 主机发现『咦!你是要去读取 www 的资料对吧!好!那么这个动作由 Proxy 主机帮你搞定!』如此一来,使用者根本就不需要在浏览器上面配置 Proxy 的相关资料,因为这个动作是『由 NAT 主机自己决定的』,所以只要在 NAT 主机上面配置妥当即可,使用者不必配置任何资料呢!那么要怎么进行呢?只要两个步骤即可: 1. 配置 Proxy 主机: 2 V7 u+ \* ~% `5 |% V/ S$ X% b
1) 如果是squid 2.5,需要更改squid配置文件中的下列指令:
) A# H" l  ~% S! V[root@test root]# vi /etc/squid/squid.conf
# V5 n/ E7 K) ~8 L% }% `5 k: B2 u5 f" Y
httpd_accel_host virtual # 告诉web加速器,针对所有的URL: c; S4 s1 R$ w9 Z0 t) c; v' m1 R
httpd_accel_port 80 # 告诉web加速器,要监听的端口是80!
" @+ K" ~/ L& ~( \% n8 L  d" _httpd_accel_with_proxy on # 这个很重要!因为配置 httpd_accel_host 之后, cache 的配置会自动被终止,必须要加上这个配置为 on 之后,才能提供 cache 的功能!  t, |+ \, b. W' p& A
httpd_accel_uses_host_header on # U5 |$ F; V4 v2 [8 B
2) 如果是squid 2.6,则只需要更改squid配置文件中的一个指令:
) S; C2 z1 e* uhttp_port 192.168.63.50:3128 transparent #192.168.63.50 就是squid服务器的地址
+ L# S9 k! R5 C" d- u[root@test root]# squid -k reconfigure 2. 配置 NAT 主机的 port map :9 O8 l6 T9 y% u8 p6 N

: F8 w+ w' s; P' U' W" z8 ?/ C再来让我们到 NAT 主机上面看看先,因为需要将 80 这个 port 交给 Proxy 的 3128 来帮忙协助,所以你的防火墙 script 必须要加入这一段才行: - Y, E) o% r' t; l9 U
#iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.62.0/24 --dport 80 -j REDIRECT --to-ports 3128
' P$ c1 B* B/ Z; I5 B6 n+ F+ R* \注意一下,那个 eth0 是『你的 NAT 对内的网卡』,至于 192.168.62.0/24 则是你的内部网域,请依照你的主机实际状态来配置!这样一来,您的 client 端完全不需要进行任何的配置,立刻就可以使用 Proxy 的好处啰3. 配置转发
/ t5 X! A- L/ A0 l, j: k0 T! A& a#echo 1 > /proc/sys/net/ipv4/ip_forward9 q% w7 u4 P. d- u- @8 Q
或:  q7 L8 h$ G, a: a+ W
#vi /etc/sysctl.conf
; n$ D7 G& v4 J2 |! k6 Dnet_ipv4_forword=1
/ ^/ b: l) i2 i) H" E2 p4 o#vi /etc/sysconfig/network+ M  P/ }' f2 m' h% P  F5 p" x( V( Y
FORWARD_IPV4=yes
% V% i, w; a) t8 v  l' Y! g#service network restart4. 配置客户端) O& ^. G. z. x# I
将另外一台计算机作为客户机进行测试,需要将网关、首选DNS服务器指向设置透明代理的服务器,清除客户端的浏览器代理设置。四. 反向代理, ]! X6 x8 h+ H* z7 f# G8 V* X
返回
; r8 X5 `  @$ P6 D0 {6 a代理服务器是使用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受外部网主机的攻击。但是,如果想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机攻击,一般的代理服务是不能实现的,需要使用反向代理来实现。+ o# V6 [: n+ L: s% k
什么是反向代理呢?其实,反向代理也就是通常所说的WEB服务器加速,它是一种通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器(即:WEB反向代理服务器)来降低实际的WEB服务器的负载。典型的结构如下图所示:2 \" @! C% G) R* Y
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 V( F% D2 y( D; \; w
1. Squid反向代理单个后台WEB服务器7 S; h# J, _: e# t4 O/ r! M5 l% |
; O3 ]4 p. _# F9 |
1) 如果WEB服务器和反向代理服务器是两台单独的机器(一般的反向代理应该有两块网卡分别连接了内外部网络)。那么,应该修改下面的内容来设置反向代理服务。
1 _) _0 ~) }' l0 i# Khttp_port 80 #squid监听的端口
" N$ X% M$ |3 G7 \6 o4 Xhttpd_accel_host 172.16.250.250 #内部WEB服务器的IP地址
9 f, B; h3 H1 [6 B3 g) yhttpd_accel_port 80 #WEB服务的端口号
2 [4 t1 N7 O0 A2 Xhttpd_accel_single_host on #转发没有缓冲的请求到一台单独的机器,squid被设置成仅对单一的web服务器作反向代理. S8 K& l4 F6 K3 [+ q, X+ J
httpd_accel_with_proxy on #如果希望squid既作反向代理服务器又作本地机器的上网代理,需要将此设为on,默认是off/ @6 U  H8 K0 {( o- t. m0 D+ @5 g% c
httpd_accel_uses_host_header off #在HTTP协议1.1中,HTTP请求包括一个主机头信息,指定URL的主机名或者主机的IP地址。这个选项可以用来完成多个后台WEB服务器的反向代理功能。
6 T* O4 n- j& w  S2 C7 L/ y9 t- x2) 如果WEB服务器和反向代理服务器是同一台机器。那么,应该设置WEB服务器的监听端口为非80端口(比如:81端口)。要修改的内容如下: 9 ?/ d: Q) E3 X$ x  w& t0 ~
http_port 80 #squid监听的端口$ I( A7 J6 ^5 t6 E. r$ i- L
httpd_accel_host localhost #内部WEB服务器的IP地址
- R6 c- P, R/ v3 Mhttpd_accel_port 81 #WEB服务器的端口号4 Z9 D2 U+ n1 l
httpd_accel_single_host on
& w. {9 K. L9 p5 b% u# |. jhttpd_accel_with_proxy on ) G+ c" q, s3 W4 n. f% B
httpd_accel_uses_host_header off
* g0 `) C9 I$ K8 u2.Squid反向代理多个后台WEB服务器
4 ^* s' F3 F% u9 P我们可以用Squid反向代理多个后台WEB服务器。例如:我们可以配置squid同时反向代理www.abc.com, www.xyz.com, www.lmn.com三个后台WEB服务器,示意图如下:" l9 |3 d/ f4 C; N/ u
5 r% x) O( T! F- t9 _
Squid的配置如下:
$ e0 T& H: Q8 O3 T4 G! s2 bhttpd_accel_host virtual4 q" [! _0 U1 `- K
httpd_accel_port 80
) k6 Q/ o+ W- e6 a4 E0 [1 x$ A+ W/ Rhttpd_accel_single_host off
: H/ D6 o. U/ }& Hhttpd_accel_uses_host_header on
5 {# `& p/ \+ d; U. _% X/ ^(注意:编译Squid时需激活Internal DNS选项)4 [, M8 V* B* d- G4 W6 f9 I
然后设置设置反响代理需要的域名解析(Internet用户通过这里解析三个网站的域名)如下:
7 P* r; a5 R7 |www.abc.com 202.102.240.74/ e6 K& v: z$ Q9 P
www.xyz.com 202.102.240.74
' Y1 }& P, ?5 m* C! Cwww.lmn.com 202.102.240.74- I& b1 N) ]6 T9 i  d0 F
使三个域名都指向反向代理服务器的IP地址202.102.240.74。) B  q  W' g% D* d( x4 F1 `
下面设置反向代理所需要的DNS入口信息(即设置内部DNS,仅仅是squid在内部使用,Internet用户不可见)。有两种方法可以设置内部DNS,使用内部DNS服务器来解析或者使用/etc/hosts文件来实现。# z& v! J: ~' k
使用内部DNS服务器的资源记录如下:- k6 u0 ^2 T: o/ p4 h( C
www.abc.com IN A 192.168.62.2( U7 _; `. z6 F4 T
www.xyz.com IN A 192.168.62.35 b* n+ {( b# h/ U3 S2 b
www.lmn.com IN A 192.168.62.4
, n6 C# y' @0 t! m3 @如果使用/etc/hosts文件来实现内部DNS(编译时应使用disable internal dns选项),编辑/etc/hosts文件添加如下条目:
% w# I2 D7 T! l192.168.62.2 www.abc.com6 `2 s% ?  a+ `- ?4 o. T/ ?
192.168.62.3 www.xyz.com/ ?4 b+ b3 M. U( z5 x
192.168.62.4 www.lmn.com
: M4 l2 W! u" M0 C. Q# s# f结论:通过本文中的论述和相关实例,可以看出,反向代理方式不单是一种WEB服务器加速器,而且使也一种对外提供Web发布时使用的有效的防火墙技术,使用它不但能节约紧缺的IP地址资源,加速WEB服务器的访问速度,而且能够保护WEB主机,因此能够适应多种应用场合。五. 故障处理7 z# h9 Y/ C2 O# B2 c5 _
返回
( A( Z; |* }9 z1 B: y+ [1. 如果在启动squid时出现下述信息:6 |( @+ m2 L" S( s; `
% squid -Nd1+ s, f( K* ?% l; o

2 e& ~% u* K; `" p1 N8 ^" jFATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'
3 A/ z' Z1 y5 z( @! V则需要在squid的配置文件中设置visible_hostname,如:
, W7 R" K' X4 j% t+ B/ hvisible_hostname squid.packet-pushers.net
  Q2 e: ]+ O. q6 A! I; u" F7 W2. 如果在配置squid代理后,客户访问出现以下提示:
9 b4 ]* f: X  |' I$ E; Y0 yERROR1 I" Q/ e% c! V( a- i
The requested URL could not be retrieved, h( g. S( h' B
While trying to retrieve the URL: http://.../  J: t8 h' r2 @& K, ^) q
可能需要在squid配置文件中加入以下指令:
1 A/ _. U3 |. H# y5 Q% j/ Ralways_direct allow all六. 一个范例  {' u+ x2 j, ~/ {$ f' @6 f
返回
: W2 J1 ?. Z) [9 H% vhttp_port 31282 [& z3 m; s- ]
icp_port 0
8 m. Q$ q$ t! M2 B
3 l' v& e& a7 l) Ycache_mem 64 MB
6 x: j" }# s6 U+ F3 {$ ocache_swap_low 804 ^  F6 w# t" l& }3 w4 D: E
cache_swap_high 85
; H. L0 }* g( m& z/ \6 T" n9 a
! ?3 j: p) ^8 [8 smaximum_object_size 32000 KB7 r. i8 a$ O% o
' M' N; M3 S+ B! Y8 m
cache_dir ufs /var/spool/squid 500 64 1024
) L$ G/ w. P, M( G$ J8 |: l# K( ecache_access_log /var/log/squid/access.log8 p4 N0 ?! V& Z' a# x- v' }) o
cache_log /var/log/squid/cache.log/ F9 V: v0 L6 A& N: X0 |% n
cache_store_log /var/log/squid/store.log
) i: a" U2 M# \( e; t8 r
- i4 ^+ k% l1 L4 k, E' Kpid_filename /var/run/squid.pid4 J9 v% R- E: V/ M* B9 z9 w- S- }

  f; S6 c9 ]1 Y1 c  F: p" u5 o# Wacl all src 0.0.0.0/0.0.0.0
( z' q& \( `, i4 U% F) \! j+ jacl alldst dst 0.0.0.0/0.0.0.0
; q1 A+ n$ g) \( x6 w! l# Pacl manager proto cache_object8 K1 n/ h7 H: Q. `) ~8 l5 N
acl localhost src 127.0.0.1/255.255.255.255% f1 n. l" o# G; p2 }
acl to_localhost dst 127.0.0.0/8
, c# k1 N( x2 [2 }8 Q$ W/ Sacl 163 url_regex 163.com1 x0 y; I: r" q: {( q
acl sina url_regex sina.com.cn- h% @' ?4 `* _
acl myclient src 192.168.6.0/24
9 r1 E/ P9 f9 X8 w- F) `9 A2 ~1 ~
. K% d; [! H4 z) rhttp_access allow 1639 G& o& G. Q* o# e0 p8 ]
http_access allow sina
" Q3 F% f' X4 {3 Z6 Ehttp_access deny !sina
; W0 T- F  Y( u; J& e, P& yhttp_access deny !1632 f$ T" _% \1 ]% u- T! b
cache_peer 192.168.1.8 parent 8080 7 no-query default
* X# u! d2 e6 [5 `
2 v3 _9 a. f) n6 l) `/ w! Pcache_effective_user squid" X. v) P1 [& Z+ ^
cache_effective_group squid. ]: o' P. x( P3 q5 X
cache_mgr root@net03.org
$ U( M/ _7 {. ~+ _1 ^; ]coredump_dir /var/spool/squid
8 w- b! s7 s3 L  j( ?/ v七. 一个限制访问的范例
$ t0 f4 e% ~/ F2 ], t' K% K( }, L$ m返回 5 F* M- P; F5 x& M# C$ _4 s7 s
http_port 3128
! u: O6 \  G2 qicp_port 0
) T* b3 k) I' y' T0 g% B( b" m" qcache_mem 64 MB: u/ u/ `6 p. ~' E2 j6 N7 t, U( t  a
cache_swap_low 80
2 _% \7 b; }# L# \cache_swap_high 855 q4 K# _' l$ R' X1 [6 l  }7 a
maximum_object_size 32000 KB
7 t* ?* V" f( M4 d+ Scache_dir ufs /var/spool/squid 500 64 1024
6 n( w( ?( E( B: f  c- jcache_access_log /var/log/squid/access.log
, q$ S1 l& F7 ~! _8 H: jcache_log /var/log/squid/cache.log7 U  C& S+ |# j" [$ E3 b9 R+ S
cache_store_log /var/log/squid/store.log* B( \: ~  b6 N  K# M: U& ~
pid_filename /var/run/squid.pid
/ b* }2 n3 h! yacl all src 0.0.0.0/0.0.0.0
0 o. r9 j& H* \4 t3 tacl manager proto cache_object: _2 ~# l! t' C; I. C. E( `
acl localhost src 127.0.0.1/255.255.255.255
  w' e4 r+ b* I. `8 j! Lacl to_localhost dst 127.0.0.0/8
5 ]* i! O' h7 k5 B+ R( kacl SSL_ports port 443 563
, X6 U' g  ^! `acl Safe_ports port 80 # http
" o9 F$ ~9 G) D. h+ Q' |4 Vacl Safe_ports port 21 # ftp8 l! e" g, t1 u2 M; J  w
acl Safe_ports port 443 563 # https, snews1 Y9 P* m7 ]) U5 H
acl Safe_ports port 70 # gopher
1 m$ Q; e9 m9 y/ ?acl Safe_ports port 210 # wais* {4 s) G2 T9 d- I' L- D
acl Safe_ports port 1025-65535 # unregistered ports- x9 N( `2 y3 C  n/ H/ [2 T- |3 z4 C' _
acl Safe_ports port 280 # http-mgmt
' s/ ~; O8 U5 O1 t2 Eacl Safe_ports port 488 # gss-http& B* `8 m" l! t. b1 \5 u8 y% ~2 ?
acl Safe_ports port 591 # filemaker2 V3 B+ C- O& y" O6 L
acl Safe_ports port 777 # multiling http' t: {  Q4 s, f
acl CONNECT method CONNECT! F; h9 ~- q0 }* D6 u. L( l
acl myclient src 192.168.6.0/24
1 h) Q0 O. x& P9 M5 Jacl 163 url_regex 163.com
/ F" w0 F# u$ ~" q" p1 r; I3 wacl sina url_regex sina.com.cn* l/ g1 @! V+ {& v9 M' W
# Only allow cachemgr access from localhost
/ \9 e5 l1 J5 Z' jhttp_access allow manager localhost
9 j$ y' d3 u/ _  Bhttp_access deny manager1 l' m2 [) E/ q0 @" v6 `; m
# Deny requests to unknown ports5 e' H8 I% _& K0 W+ [9 L# ^
http_access deny !Safe_ports
& _% ?2 l$ l4 J. o7 _' V; b# Deny CONNECT to other than SSL ports5 Z( W) c. ^3 `) |; n
http_access deny CONNECT !SSL_ports
( A. g; `% G- e$ h3 H2 }0 m
- e: D8 c; M9 c- y; lcache_peer 192.168.1.8 parent 8080 7 no-query default& g' ?" C+ v6 d& m6 [4 N
acl ip_acl src 192.168.6.0/24
0 h: Q# L6 M+ Q/ w1 D, Z$ Lacl time_acl time M T W H F A S 9:00-19:00
. n0 c2 A: a/ a. {7 O7 Y/ shttp_access allow ip_acl time_acl
: C% I3 q  b9 L8 ]) z/ k/ q3 a; ^5 Q) a- S, G5 N
cache_peer_access 192.168.1.8 allow 163. {" }) P+ r9 Q5 D0 p' S7 Q
cache_peer_access 192.168.1.8 deny !163% ~5 L8 k5 S# d' \- V
cache_peer_access 192.168.1.8 allow sina( Y& Y9 o: C5 l+ d- S
cache_peer_access 192.168.1.8 deny !sina
4 y: _8 N; f2 J% k" m7 L2 j3 T5 H  F' B
cache_effective_user squid
) Q4 r; d6 w* c. ecache_effective_group squid- Q" O. \0 Q, k* g: `/ d- I
cache_mgr root@net03.org
! _9 `! R2 i( v6 K9 T6 {. Qcoredump_dir /var/spool/squid* U8 r2 n3 H8 B$ o1 H9 @* k
9 I) U4 ^7 T; C8 i9 p' q) P+ v6 T
#acl pl800_arp arp 00:08:c7:9f:34:41
4 |+ n2 r- T* _6 ^' ]#http_access allow pl800_arp& V- u( C# _+ g+ b0 J
" ?$ q2 N3 q$ X0 U
参考文献:http://www.linux.gov.cn/netweb/squid.htm
! C5 z# w* Q2 G0 }4 d' ]5 X+ qhttp://www.linux.gov.cn/netweb/squid_guide/index.html

返回列表
Namecheap
Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting
互联网安全