一、squid用法详解
1.正向代理
(1).ACL设置
        

 
  
  1. acl all src 0.0.0.0/0.0.0.0 访问的源地址  
  2.         acl manager proto cache_object proto协议  
  3.         acl localhost src 127.0.0.1/255.255.255.255  
  4.         acl to_localhost dst 127.0.0.0/8 目标地址  
  5.         acl SSL_ports port 443  
  6.         acl Safe_ports port 80          # http  
  7.         acl Safe_ports port 21          # ftp  
  8.         acl Safe_ports port 443         # https  
  9.         acl Safe_ports port 70          # gopher  
  10.         acl Safe_ports port 210         # wais  
  11.         acl Safe_ports port 1025-65535  # unregistered ports  
  12.         acl Safe_ports port 280         # http-mgmt  
  13.         acl Safe_ports port 488         # gss-http  
  14.         acl Safe_ports port 591         # filemaker  
  15.         acl Safe_ports port 777         # multiling http  
  16.         acl CONNECT method CONNECT外部协议的方法  

(2).ACL设置还得通过http_access来控制其访问控制权限,根据先后次序匹配,如果匹配到,就不会向下再处理了,所以一般严格的规则放在上面
  

 
  
  1. http_access allow manager localhost  
  2. http_access deny manager  
  3. http_access deny !Safe_ports  
  4. http_access deny CONNECT !SSL_ports  
  5. http_access allow localhost  
  6. http_access deny all 

(3).第一次启动squid,会自动创建一个用于存放缓存的目录,如果遇到这个错误


 是因为squid不识别主机名,在squid.conf中添加visible_hostname HOSTNAME即可
 在其缓存目录中可以看到,他的目录是根据十六进制来定义的,squid是分类存放
 设置代理,启动rs2,修改其firefox浏览器的代理选项


(4).常见的acl列表类型有
 

 
  
  1. src  
  2.      acl all src 0.0.0.0./0.0.0.0  
  3.      http_access deny all 
  4. dst   通过hosts反解ip地址  
  5. port  
  6. srcdomain  
  7. dstdomain  
  8. time访问时间  
  9.     acl acltime time M 9:00-17:00周一的9点到17点  
  10. maxconn最大连接数  
  11. url_regex url判断  
  12.     acl reject url_regex -i ^http://www.google.cn.in/index.html  
  13.  http_access deny reject即拒绝用户访问http://www.google.cn.in/index.html  
  14. urlpath_regex url路径中匹配 acl reject urlpath_regex -i index.html  
  15.  http_access deny reject  

2.反向代理

 
  
  1. http_port 172.16.133.11:80 vhost  
  2. cache_peer 172.16.133.12 parent 80 0 originserver weight=5 max-conn=30  
  3. cache_peer 172.16.133.21 parent 80 0 originserver weight=5 max-conn=30         


实现反向代理并且负载均衡
type三种类型
    parent父节点
    sibling兄弟节点
    multicast组播节点
proxy-port代理端口
icp-port icp端口
二、varnish详解
1.监听端口6081,6082
web反向代理服务器
   负载均衡
   后端服务器健康状态检测
缓存支持基于文件或者内存的缓存
提供了强大的缓存控制机能VCL:varnish configuration language
标记为private的页面不会被缓存
2.配置文件/etc/sysconfig/varnish
 

 
  
  1. NFILES=131072最大能打开的文件个数  
  2. MEMLOCK=82000使用多大的共享内存  
  3. RELOAD_VCL=1是否自动加载vcl配置文件  
  4. 4种模式,默认使用第三种  
  5. VARNISH_VCL_CONF=/etc/varnish/default.vcl vcl配置文件路径  
  6. VARNISH_LISTEN_PORT=6081监听端口  
  7. VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1管理监听地址  
  8. VARNISH_ADMIN_LISTEN_PORT=6082管理监听端口  
  9. VARNISH_SECRET_FILE=/etc/varnish/secret管理端口的加密文件  
  10. VARNISH_MIN_THREADS=1最小线程数  
  11. VARNISH_MAX_THREADS=1000最大线程数  
  12. VARNISH_THREAD_TIMEOUT=120最大超时时间  
  13. VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin缓存数据的文件  
  14. VARNISH_STORAGE_SIZE=1G指定文件最大值是1G  
  15. VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}" 
  16. VARNISH_TTL=120当页面没设置时,默认缓存多久  
  17. DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \  
  18.              -f ${VARNISH_VCL_CONF} \  
  19.              -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \  
  20.              -t ${VARNISH_TTL} \  
  21.              -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \  
  22.              -u varnish -g varnish \  
  23.              -S ${VARNISH_SECRET_FILE} \  
  24.              -s ${VARNISH_STORAGE}"  

可以通过man varnishd获得配置文件所需选项类型
    -f指定vcl配置文件
   -h做hash运算的算法
   -s指定缓存的类型
        malloc[,size]
        file[,path[,size[,granularity]]]
3.可以通过man vcl查看default.vcl中的变量表
/etc/varnish/default.vcl
负载均衡
 

 
  
  1. backend server1 {  
  2.   .host = "172.16.133.22";  
  3.   .port = "80";  
  4.   .probe = {  
  5.          .url="/";  
  6.    .interval = 5s;  
  7.    .timeout = 1s;  
  8.    .window = 5;  
  9.    .threshold = 3;  
  10.   }后台健康检测  
  11. }  
  12. backend server2 {  
  13.   .host = "172.16.133.12";  
  14.   .port = "80";  
  15.    .probe = {  
  16.          .url="/";  
  17.    .interval = 5s;  
  18.    .timeout = 1s;  
  19.    .window = 5;  
  20.    .threshold = 3;  
  21.   }  
  22. }  
  23. director example_director round-robin {  
  24. {  
  25. .backend = server1;  
  26. weight=1;  
  27. }  
  28. {  
  29. .backend = server2;  
  30. weight=1;  
  31. }  
  32. }  
  33. sub vcl_recv {  
  34. set req.backend = myload;  
  35. }  

4.状态检测
url
   What URL should varnish request
interval
   How often should we poll
   每隔多久检测一次
timeout
   What is the timeout of the probe
   每次检测的超时时间多久
window
   Varnish will maintain a sliding window of results.Here the window has five checks
   检查时返回的状态结果会基于一个滑动窗口来维持,存储每次检查的结果的,一共检查多少次
threshold
   How many of the .window last polls must be good for the backend to be declared healthy
   当滑动窗口空闲格还剩多少时,认为是正常的
initial
   How many of the probes aggod when Varnish starts - defaults to the same amount as the threshold  

5.vcl的内置函数
regsub(str,regex,sub)先制定一个string,然后指定模式,最后指定替换为什么,也可理解为url重写,只替换匹配到的第一个字符串
       regsub($req.url,www.magedu.com,magedu.com)
regsuball(str,regex,sub)跟regsub一样,只不过是全局的
ban_url(regex)让缓存失效的机制
ban(expression)让缓存失效的机制
purge;让缓存失效的机制,力度更粗糙
return(restart)返回
return()返回
hash_data()
6.varnishadm管理控制工具
varnishadm(如果想通过telnet连上去,并不通过secret认证,可以将varnish配置文件中的 -S ${VARNISH_SECRET_FILE} \注释掉)
        -T 指定管理端口
     -S 指定其认证文件
  varnishadm -T 127.0.0.1:6082 -S /etc/varnish/secret


  进入交互式页面,然后可以使用help命令查看交互式下有什么命令
  status可以查看当前varnish信息,子进程信息
  stop停掉子进程
  start启动子进程
  param.show -l可以列出当前管理借口中我们可以修改的参数有哪些
  param.set 设定参数
  storage.list列出当前varnish当前用户存储的缓存类型
  banner显示欢迎信息
  varnishlog定义日志的命令,日志文件是data格式的二进制文件
  varnishncsa定义日志文件为ncsa格式的,可读文件
         service varnishlog stop
         service varnishncsa start
 varnishstatus显示当前varnish状态信息
 varnishtop显示varnish当前的工作状况