一、概念:
反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务器的 IP 地址,这样 URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB 服务器的负载,提高了访问速度,同时避免了因用户直接与 WEB 服务器通信带来的安全隐患。
二、假设环境:

DNS将www.example.com解析到squid服务器192.168.209.253
当client访问www.example.com网站时,则正确的显示该网页。服务器端的响应对客户端是透明的,客户端不知道请求是由哪台 WEB 服务器处理的;而且其中某台 Squid 服务器或 WEB 服务器发生故障,也不影响服务的正常运行。
三、建立脚本:
 
  1. #!/bin/bash 
  2. #BY liyaoyi 2012-05-04 
  3. #install squid 
  4.  
  5. #down install 
  6. useradd squid 
  7. wget wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.19.tar.gz 
  8. tar zxf squid-3.1.19.tar.gz 
  9. cd squid-3.1.19 
  10. #install  
  11. ./configure -prefix=/usr/local/squid3 \ 
  12. -enable-async-io=100 \ 
  13. -with-pthreads \ 
  14. -enable-storeio="aufs,diskd,ufs" \ 
  15. -enable-removal-policies="heap,lru" \ 
  16. -enable-icmp \ 
  17. -enable-delay-pools \ 
  18. -enable-useragent-log \ 
  19. -enable-referer-log \ 
  20. -enable-kill-parent-hack \ 
  21. -enable-arp-acl \ 
  22. -enable-default-err-language=Simplify_Chinese \ 
  23. -enable-err-languages="Simplify_Chinese English" \ 
  24. -disable-poll \ 
  25. -disable-wccp \ 
  26. -disable-wccpv2 \ 
  27. -disable-ident-lookups \ 
  28. -disable-internal-dns \ 
  29. -enable-basic-auth-helpers="NCSA" \ 
  30. -enable-stacktrace \ 
  31. -with-large-files \ 
  32. -disable-mempools \ 
  33. -with-filedescriptors=65535 \ 
  34. -enable-internal-dns \ 
  35. -enable-epoll \ 
  36. -enable-ssl \ 
  37. -enable-x-accelerator-var 
  38. make 
  39. make install 
  40.  
  41. #生成squid.conf配置文件 
  42. :>/usr/local/squid3/etc/squid.conf 
  43. cat >> /usr/local/squid3/etc/squid.conf << EOF 
  44. visible_hostname www.example.com 
  45. cache_mgr liyaoyi0317@163.com 
  46.  
  47. http_port 80 vhost vport 
  48.  
  49. cache_mem 256 MB 
  50. maximum_object_size 20000 KB 
  51. maximum_object_size_in_memory 4096 KB 
  52. memory_replacement_policy lru 
  53.  
  54. cache_dir ufs /usr/local/squid3/var/cache 1000 16 256 
  55. max_open_disk_fds 0 
  56.  
  57. cache_swap_low 80 
  58. cache_swap_high 95 
  59.  
  60. error_directory /usr/local/squid3/share/errors/zh-cn 
  61.  
  62. logformat squid %ts.%3tu %tr %>a %Ss /%03<Hs %<st %rm %ru %un %Sh/$<A %mt 
  63. access_log /usr/local/squid3/var/logs/access.log squid 
  64. pid_filename /usr/local/squid3/var/logs/squid.pid 
  65. cache_store_log none 
  66.  
  67. cache_peer 192.168.209.128 parent 80 0 no-query originserver round-robin name=web1 
  68. cache_peer 192.168.209.254 parent 80 0 no-query originserver round-robin name=web2 
  69. cache_peer_domain web1 www.example.com 
  70. cache_peer_domain web2 www.example.com 
  71. cache_peer_access web1 allow all 
  72. cache_peer_access web2 allow all 
  73.  
  74. http_access allow all 
  75. acl QUERY urlpath_regex .php .jsp .asp .pl .cgi 
  76. cache deny QUERY 
  77.  
  78. cache_effective_user squid 
  79. cache_effective_group squid 
  80. EOF 
  81.  
  82. #配置环境变量 
  83. cat >> /etc/profile << 'EOF' 
  84. export PATH=$PATH:/usr/local/squid3/sbin 
  85. EOF 
  86. source /etc/profile 
  87.  
  88. #修改权限 
  89. chown -R squid:squid /usr/local/squid3/var/cache 
  90. chown -R squid:squid /usr/local/squid3/var/logs 
  91.  
  92. /usr/local/squid3/sbin/squid -z     #创建缓存目录  
  93. /usr/local/squid3/sbin/squid        #启动服务 
  94.  
  95. #轮循日志 
  96. echo "0 0 * * * /usr/local/squid3/sbin/squid -k rotate" >> /var/spool/cron/root 
  97.  
  98. #生成squid启动脚本 
  99. cat >> /etc/init.d/squid << 'EOF' 
  100. #!/bin/bash 
  101. #chkconfig: 345 85 15 
  102. #description: squid test 
  103. #BY liyaoyi 2012-05-04 
  104.  
  105. . /etc/rc.d/init.d/functions 
  106. squid="/usr/local/squid3/sbin/squid" 
  107. prog="squid" 
  108. RETVAL=0 
  109. start() { 
  110.         echo -n $"Starting $prog: " 
  111.         daemon $squid -s 
  112.         RETVAL=$? 
  113.         echo  
  114.         return $RETVAL 
  115.         } 
  116. stop () { 
  117.         echo -n $"Stoping $prog: " 
  118.         daemon $squid -k shutdown 
  119.         echo  
  120.         return $RETVAL 
  121.         } 
  122. reload () { 
  123.         echo -n $"Reloading $prog: " 
  124.         daemon $squid -k reconfigure 
  125.         echo  
  126.         return $RETVAL 
  127.         } 
  128.  
  129. case "$1" in 
  130.         start) 
  131.                 start 
  132.                 ;; 
  133.         stop) 
  134.                 stop 
  135.                 ;; 
  136.         reload) 
  137.                 reload 
  138.                 ;; 
  139.         restart) 
  140.                 stop 
  141.                 start 
  142.                 ;; 
  143.         *) 
  144.         echo $"Usage: $0 {start|stop|restart|reload}" 
  145.                 RETVAL=1 
  146. esac 
  147.  
  148. exit $RETVAL 
  149.  
  150. EOF 
  151.  
  152. chmod a+x /etc/init.d/squid 
  153. chkconfig --add squid 
  154. chkconfig squid on 
  155. /etc/init.d/squid start 
  156.  
  157. echo "" 
  158. echo "squid install OK..." 
  159. echo "" 
四、Squid调试中多个常用命令(注意squid命令路径)
1、原始化squid.conf 里配置的 cache 目录
#squid/sbin/squid -z
第一次启动squid服务时必须输入此命令,假如有错误提示,请检验你的 cache目录的权限。
2、对squid.conf 排错,即验证 squid.conf 的 语法和配置。
#squid/sbin/squid -k parse
假如 squid.conf 有语法或配置错误,这里会返回提示你,假如没有返回,恭喜,能够尝试启动squid。
3、在前台启动squid,并输出启动流程。
#squid/sbin/squid -N -d1
假如有到 ready to server reques,恭喜,启动成功。
然后 ctrl + c,停止squid,并以后台运行的方式启动它。
4、启动squid在后台运行。
#squid/sbin/squid -s
这时刻能够 ps -A 来查看系统进程,能够看到俩个 squid 进程。
5、停止 squid
#squid/sbin/squid -k shutdown
6、重新加载修改过的squid.conf
#squid/sbin/squid -k reconfigure
当你对squid.conf进行修改后,无须重启服务,使用这个命令,重新读取配置生效。
7、缓存命中率命令
#more /usr/local/squid3/var/logs/page_zs_access_log |grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户
#more /usr/local/squid3/var/logs/page_zs_access_log |grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户
#more /usr/local/squid3/var/logs/page_zs_access_log |grep TCP_MISS
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户
8、可以查看下命中率及其他相关信息
#/usr/local/squid3/bin/squidclient -p 80 -h localhost mgr:info
通过squidclient这个工具来查看squid的运行情况,缓存命中率等。
 
 
参考:http://www.ibm.com/developerworks/cn/linux/l-cn-squid/index.html
http://baike.baidu.com/view/490519.htm
http://www.myhack58.com/Article/sort099/sort0102/2011/31175.htm