squid 安装调试过程中的几个常用命令.

刚才又看了一遍置顶的 问答帖子
发现好多提问的貌似都没有仔细的看过《squid中文手册》造成在调试安装的过程中浪费了很多时间
我贴一下吧
解压,编译,make ,make install 就不说了。
从 make install 后开始。
当你的 squid.conf 配置文档按照你的想法修改完以后,启动 squid 之旅就开始了。
1,初始化你在 squid.conf 里配置的 cache 目录
#squid/sbin/squid -z
如果有错误提示,请检查你的 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,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让squid重新按照你的 squid.conf 来运行。
7,把squid添加到系统启动项
编辑 /etc/rc.d/rc.local
添加如下行:   /usr/local/squid/sbin/squid -s
当然,并不是每个人都喜欢这种启动方式,你可以用你最习惯的方式;或者把它安装为服务。

再来点其他的。
1,修改cache 缓存目录的权限。
#chown -R squid:squid /home/cache
我的cache缓存目录是 /home/cache,squid执行用户和用户组是 squid,squid。
2,修改squid 日志目录的权限
#chown -R squid:squid /usr/local/squid/var/logs
这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作 。
例如生成   access.log cache.log store.log
3,查看你的日志文档。
#more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_MISS
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。
关于 TCP_XXXX 等参数及代表的信息,请参看《squid中文权威指南》13.2.1 章节。
当然,本例中的蓝色文字是可以修改为其他的参数,例如你的域名  www.xxxx.com ,同样可以看到access.log里关于该域名的行。

先到这里吧,想起来再补充。
人人为我,我为人人,重复一下彭勇华哥哥的话 :
窗外繁星点点,开源的世界亦如这星空般美丽,而squid是其中耀眼的一颗星。

同步发布于偶的部落窝  http://blog.274500.com
如有转载请注明出自CU.

404的http头在squid中的处理

404的网页在squid中也会被缓存,会出现TCP_NEGATIVE_HIT:NONE www.php-oa.com这样的日志,可以用
negative_ttl 的参数来控制时间,默认5分钟,有点长,建议小点

如何理解Squid refresh_pattern

refresh_pattern的作用:
用于确定一个页面进入cache后,它在cache中停留的时间。

语法:
refresh_pattern [-i] regexp min percent max [options]

几个概念:
resource age =对象进入cache的时间-对象的last_modified
response age   =当前时间-对象进入cache的时间
LM-factor=(response age)/(resource age)

举个例子,这里只考虑percent, 不考虑min   和 max

例如:refresh_pattern 20%

假设源服务器上www.aaa.com/index.htm   —–lastmodified 是       2007-04-10 02:00:00
squid上    proxy.aaa.com/index.htm   index.htm进入cache的时间   2007-04-10 03:00:00

1)如果当前时间 2007-04-10 03:00:00
resource age =3点-2点=60分钟
response age =0分钟
index.htm还可以在cache停留的时间(resource age)*20%=12分钟
也就是说,index.htm进入cache后,可以停留12分钟,才被重新确认。

2)如果当前时间   2007-04-10 03:05:00
resource age =3点-2点=60分钟
response age =5分钟
index.htm还可以在cache停留的时间(resource age)*20%=12分钟-5=7
LM-factor=5/60=8.3%<20%

一直到2007-04-10 03:12:00 LM-factor=12/60=20% 之后,cache中的页面index.htm终于stale。
如果这时没有index.htm的请求,index.htm会一直在缓存中,如果有index.htm请求,squid收到该请求后,由于已经过 期,squid会向源服务器发一个index.htm是否有改变的请求,源服务器收到后,如果index.htm没有更新,squid就不用更新缓存,直 接把缓存的内容放回给客户端,同时,重置对象进入cache的时间为与源服务器确认的时间,比如2007-04-10 03:13:00,如果正好在这个后重新确认了页面。重置后,resource age变长,相应在cache中存活的时间也变长。

如果有改变则把最新的index.htm返回给squid,squid收到会更新缓存,然后把新的index.htm返回给客户端,同时根据新页面中的Last_Modified和取页面的时间,重新计算resource age,进一步计算出存活时间。

实际上,一个页面进入cache后,他的存活时间就确定了,即 (resource age) * 百分比,一直到被重新确认。

理解了百分比后,min max就好理解了

squid收到一个页面请求时:
1、计算出response age,
2、如果response age<min 则 fresh   如果response age>max 则 stale
3、如果response age在之间,如果response时间<存活时间,fresh,否则stale

Squid中的日志出现TCP_CLIENT_REFRESH_MISS的问题排除

今天检查Squid发现大量的日志出现TCP_CLIENT_REFRESH_MISS,见到Cacti中的流量,自己的CDN节点命令不高,查了很久的原因,最后发现,原来是exe的文件下载的原因.

花了半天的时间才解决这个问题,要解决这个问题。

range_offset_limit 和 reload_into_ims
range_offset_limit这个参数,主要是对各种流媒体和要断点续传的文件的缓存的。缺省是0,也就是说 只要client发过来的http header里包含了“Range:” ,squid会把这个请求转到后端http server,最致命的是,http server返回的内容并不会进入squid的cache store。

range_offset_limit就派上用场了,把它的值设置为-1;然后squid会把Range头去掉,而从后端http server把内容全部抓下来,放到cache store里,随后的对该cache的访问就不再转发到后端http server,可以大大提高命中率。也可以给这个参数设置一个值,会提前下载多少内容.但要注意,这个参数不要大过 maximum_object_size ,不然下载完了,maximum_object_size 这个参数不能缓存这么多,又删除这个文件.白白点用你的流量.

reload_into_ims 这个参数,要分清哦,不是refresh_pattern中的参数,他是一个单独的参数.
在flashget和迅雷之类的软件,下载时发送http header时会包含下列信息:
Cache-Control:no-cache
Pragma:no-cache
这样的话squid主机接受这http header以后会让squid服务器直接连接web server取新的数据。这样对服务器很大的压力,因为服务器的过期时间是后面的程度控制,不方便用refresh_pattern的 ignore-reload 参数强行忽略请求里的任何no-cache指令,这时只有使用reload_into_ims这个参数.

打开这个参数为on ,就行,这个参数违反 HTTP 协议,但是对大部分网站来说是可以设置为 on 的,只要后端服务器对
If-Modified-Since 头的判断正确即可。

下面是参数解释

When you enable this option, client no-cache or “reload” requests will be changed to If-Modified-Since requests.
如果客户端送过来no-cache的http头,和刷新重新载入他的浏览器时,装改变成请求变成 If-Modified-Since的请求.

SQUID refresh_pattern详解

SQUID refresh_pattern详解refresh_pattern 大概是 squid 最有意思但最不好懂的配置参数了,经过看书,大概明白如何使用,写出来贡献。

记住refresh_pattern 只对后端没设置Expires过期时间的页面起作用,比如论坛页面;而对类似apache mod_expires 设置过的页面不起作用。

说明之前,先将个概念LM,LM就是页面Header里时间(Date)和Last-Modified时间的差。Date一般是Squid从后面取页面的时间,Last-Modified 一般是页面生成时间。

refresh_pattern 的语法是

Code:
refresh_pattern [-i] regexp min percent max [options]

regexp 就不讲了,大家都明白的;)
min, max的单位是分钟,percent就是百分比。

refresh_pattern 的算法如下:(当前时间定义为CURRENT_DATE)
1) If ((CURRENT_DATE-DATE(就是LM里定义的时间)) < min),cache是新鲜的
2) else if ((CURRENT_DATE-DATE) < (min + (max-min)*percent),cache是新鲜的
3) else cache是过期的
cache过期就需要从后面server取新鲜内容。
<img src="http://blog.cnlinux.net/image/default/ad.gif">
如果希望页面一进入cache就不删除,直到被主动purge掉为止,可以加上ignore-reload选项
一般情况可以使用 reload-into-ims。
举例:

Code:
refresh_pattern -i .gif$ 1440 50% 2880 ignore-reload
refresh_pattern -i .jpg$ 1440 50% 2880 ignore-reload
refresh_pattern -i .png$ 1440 50% 2880 ignore-reload
refresh_pattern -i .mp3$ 1440 50% 2880 ignore-reload
refresh_pattern -i .wmv$ 1440 50% 2880 ignore-reload
refresh_pattern -i .rm$ 1440 50% 2880 ignore-reload
refresh_pattern -i .swf$ 1440 50% 2880 ignore-reload
refresh_pattern -i .mpeg$ 1440 50% 2880 ignore-reload
refresh_pattern -i .wma$ 1440 50% 2880 ignore-reload
refresh_pattern -i .css$ 10 50% 60 reload-into-ims
refresh_pattern -i .js$ 10 50% 60 reload-into-ims
refresh_pattern -i .xml$ 10 50% 30 reload-into-ims

Nginx+Haproxy+Thin

Nginx和Thin以前都介绍过,这里主要介绍下Haproxy的安装以及配合使用。

1、下载
wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.15.3.tar.gz

2、编译安装
sudo aptitude install libpcre++-dev
tar -zxvf haproxy-1.3.15.3.tar.gz
cd haproxy-1.3.15.3
sudo make TARGET=linux26 CPU=i386 USE_STATIC_PCRE=2
sudo make install
install -d /usr/local/sbin
install haproxy /usr/local/sbin
install -d /usr/local/man/man1
install -m 644 doc/haproxy.1 /usr/local/man/man1
install -d /usr/local/doc/haproxy
for x in configuration architecture haproxy-en haproxy-fr; do
        install -m 644 doc/$x.txt /usr/local/doc/haproxy ;
    done

3、配置文件
1)Haproxy配置(/opt/devroot/itechtag/haproxy.conf)

Haproxy配置

  1. global  
  2.    daemon  
  3.    maxconn        4096       # total max connections (dependent on ulimit)  
  4.    nbproc         2          # number of processing cores  
  5.    
  6. defaults  
  7.    mode               http  
  8.    clitimeout         60000        # maximum inactivity time on the client side  
  9.    srvtimeout         30000        # maximum inactivity time on the server side  
  10.    timeout connect    4000         # maximum time to wait for a connection attempt to a server to succeed  
  11.    
  12.    option             httpclose      # disable keepalive (HAProxy does not yet support the HTTP keep-alive mode)  
  13.    option             abortonclose   # enable early dropping of aborted requests from pending queue  
  14.    option             httpchk        # enable HTTP protocol to check on servers health  
  15.    option             forwardfor     # enable insert of X-Forwarded-For headers  
  16.    
  17.    
  18.    balance roundrobin             # each server is used in turns, according to assigned weight  
  19.    
  20.    stats enable                   # enable web-stats at /haproxy?stats  
  21.    stats auth         admin:pass   # force HTTP Auth to view stats  
  22.    stats refresh      5s         # refresh rate of stats page  
  23.    
  24. listen rails_proxy 127.0.0.1:8100  
  25.    # – equal weights on all servers  
  26.    # – maxconn will queue requests at HAProxy if limit is reached  
  27.    # – minconn dynamically scales the connection concurrency (bound my maxconn) depending on size of HAProxy queue  
  28.    # – check health every 20000 microseconds  
  29.    
  30.    server web1 127.0.0.1:8000 weight 1 minconn 3 maxconn 6 check inter 20000  
  31.    
  32. listen slow_proxy 127.0.0.1:8200  
  33.    # cluster for slow requests, lower the queues, check less frequently  
  34.    server web1 127.0.0.1:8000 weight 3 minconn 30 maxconn 300 check inter 20000  
  35.    server slow1 127.0.0.1:8001 weight 1 minconn 10 maxconn 300 check inter 40000  
  36.    server slow2 127.0.0.1:8002 weight 1 minconn 1 maxconn 300 check inter 40000  
  37.    server slow3 127.0.0.1:8003 weight 1 minconn 1 maxconn 300 check inter 40000  

2)Nginx配置

Nginx配置

  1. # File generated on 25 May 08  
  2.   
  3. #upstream name has to be unique so add on the port number  
  4. #generate multiple mongrels  
  5. upstream thin_9000{  
  6.      server 127.0.0.1:8200;  
  7.      }  
  8.   
  9. server {  
  10.              listen    80;  
  11.              server_name localhost;  
  12.   
  13.              access_log /opt/devroot/itechtag/log/access.log;  
  14.              error_log   /opt/devroot/itechtag/log/error.log;  
  15.   
  16.              root    /opt/devroot/itechtag/public/;  
  17.              index   index.html;  
  18.              
  19.              location / {  
  20.                     proxy_set_header   X-Real-IP   $remote_addr;  
  21.                     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;  
  22.                     proxy_set_header Host $http_host;  
  23.                     proxy_redirect false;  
  24.   
  25.                     if (-f $request_filename/index.html) {  
  26.                                             rewrite (.*) $1/index.html break;  
  27.                            }  
  28.                            if (-f $request_filename.html) {  
  29.                                             rewrite (.*) $1.html break;  
  30.                            }  
  31.   
  32.                            if (!-f $request_filename) {  
  33.                                             proxy_pass http://thin_9000;  
  34.                                             break;  
  35.                            }  
  36.              }  
  37.   
  38. }  

3)thin配置

thin配置

  1. —  
  2. pid: tmp/pids/thin.pid  
  3. log: log/thin.log  
  4. port: 8000  
  5. max_conns: 1024  
  6. timeout: 30  
  7. chdir: /opt/devroot/itechtag  
  8. max_persistent_conns: 512  
  9. environment: production  
  10. address: 0.0.0.0  
  11. servers: 4  
  12. daemonize: true  

4、启动
sudo haproxy -f /opt/devroot/itechtag/haproxy.conf -p pidfils.oid

5、停止
kill $(cat /home/source/haproxy-1.3.15.3/examples/pidfils.oid)

6、刷新
sudo haproxy -f /opt/devroot/itechtag/haproxy.conf -sf $(cat /opt/devroot/itechtag/pidfils.oid)

7、监控
http://127.0.0.1:8200/haproxy?stats

8、测试
ab -n 2000 -c 200 http://127.0.0.1/

附录:Haproxy帮助信息
iceskysl@IceskYsl:/home/source/haproxy-1.3.15.3$ haproxy
HA-Proxy version 1.3.15.3 2008/09/02
Copyright 2000-2008 Willy Tarreau <w@1wt.eu>

Usage : haproxy -f <cfgfile> [ -vdVD ] [ -n <maxconn> ] [ -N <maxpconn> ]
        [ -p <pidfile> ] [ -m <max megs> ]
        -v displays version ; -vv shows known build options.
        -d enters debug mode ; -db only disables background mode.
        -V enters verbose mode (disables quiet mode)
        -D goes daemon ; implies -q
        -q quiet mode : don’t display messages
        -c check mode : only check config file and exit
        -n sets the maximum total # of connections (2000)
        -m limits the usable amount of memory (in MB)
        -N sets the default, per-proxy maximum # of connections (2000)
        -p writes pids of all children to this file
        -de disables epoll() usage even when available
        -ds disables speculative epoll() usage even when available
        -dp disables poll() usage even when available
        -sf/-st [pid ]* finishes/terminates old pids. Must be last arguments.

参考资料:
http://codesnippets.joyent.com/tag/ubuntu

初尝利用HAProxy 实现负载均衡

先说一些无关的话题了!好久没有发贴了,多愿谅!最近一直忙,谢谢喜欢linuxpk,和喜欢netseek的朋友们!()。其实本人也是真真正正的菜鸟,写这些文章也主要是对自己学习的一个很好的总结,更重要的是帮助那些对新技术和喜欢的朋友,学习相关的知识起到辅助作用。虽然是菜鸟,但从学校到毕业工作一路走来,在网络上认识不少的朋友,无论是对工作和都帮助不少!收获不少!在此感谢他们!
正如还在毕业之初,白金大哥在网络上和我说,我的前辈朋友都是我的金桶那时候傻的连金桶都不知道是什么意思(PS:别笑!)。人生最宝贵的是能遇到一些志同道合的朋友,一起努力为明天奋斗!
虽然有些人很久没有和他们联系了,但是每个人的帮助我会永记在心的!再次感谢他们!
最高兴的是linuxpk推出了<<开源>>电子杂志[下载地址:http://bbs.linuxpk.com/thread-12999-1-1.html],希望学习linux的朋友多多投稿!多写一些小笔记,帮助网络上对linux感兴趣的朋友,同时希望linuxpk(linux宝库)论坛能够真真正正的成为大家一个互动讨论学习和认识好朋友的一个交流平台!好了说这么多了,希望大家一起努力!(PS:年纪大了,话就多了!)。

一,HAProxy 介绍
   反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, 会自动将该服务器摘除,故障恢复后再自动将该服务器加入。新的1.3引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.

二,利用HAPorxy实现负载均衡
   1. 利用HAProxy实现负载均衡
192.168.169.137 (haproxy)———负载均衡———-(192.168.169.117;192.168.169.118)
安装配置HAproxy
cd /usr/local/
wgethttp://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.14.2.tar.gz
tar zxvf haproxy-1.3.14.2.tar.gz
mv   haproxy-1.3.14.2   haproxy
cd haproxy
make TARGET=linux26

2. 创建配置文件
# vi haproxy.cfg

CODE:

--------------------------------------------------------------------------------------------------------------------
global
       maxconn 5120
       chroot /usr/local/haproxy
       uid 99
       gid 99
       daemon
   quiet
       nbproc   2   #通过nbproc多设置几个haproxy并发进程,这样每个进程的task_queue相对就会短很多,性能自然就能提高不少
       #pidfile /var/run/haproxy-private.pid

defaults
       log     global
       mode http
       option   httplog
       option   dontlognull
       log 127.0.0.1 local3
       retries 3
       option redispatch
       maxconn 2000
       contimeout    5000
       clitimeout    50000
       srvtimeout    50000

listen webfarm 0.0.0.0:80
   mode http
   stats uri /haproxy-stats     #监控haproxy状态
   stats realm Haproxy statistics
   stats auth netseek:52netseek   #设置状态监控的用户名为netseek密码为52netseek
   balance roundrobin     #负载均衡算法
   cookie SERVERID insert indirect
   option httpclose #
   option forwardfor   #apache日志转发功能
   option httpchk HEAD /check.txt HTTP/1.0   #健康检测
server app_bbs1 192.168.169.117:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server app_bbs2 192.168.169.118:80 cookie app1inst2 check inter 2000 rise 2 fall 5
syslog.conf里加一行
local3.*       /var/log/haproxy.log
  
# touch /var/log/haproxy.log
# chown haproxy:haproxy /var/log/haproxy.log
# chmod u+x /var/log/haproxy.log
  
# tail –f /var/log/harpoxy.log 监控日志

# ./haproxy -f haproxy.cfg 启动服务.

监控状态图示http://192.168.169.137/haproxy-stats,输入用户名密码查看状态。


harproxy.jpg

后端apache日志处理
配置httpd.conf
LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b " combined
       CustomLog /var/log/httpd/access_log combined

虚拟主机不记录检测日志:
SetEnvIf Request_URI "^/check.txt$" dontlog
LogLevel warn
ErrorLog /var/log/httpd/vhost_error.log
CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog

三.相关介绍
#./haproxy –help //haproxy相关命令参数介绍.
haproxy   -f   <配置文件>   [-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
   [-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist…]
   -d     前台,debug模式
   -D     daemon模式启动
   -q     安静模式,不输出信息
   -V     详细模式
   -c     对配置文件进行语法检查
   -s     显示统计数据
   -l     显示详细统计数据
   -dk 不使用kqueue
   -ds 不使用speculative epoll
   -de 不使用epoll
   -dp 不使用poll
   -db 禁用后台模式,程序跑在前台
   -sf <pidlist>
   程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后
   -st <pidlist>
   程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后
四,更高级的应用参考相关文档
   官方参考手册:http://haproxy.1wt.eu/download/1.3/doc/haproxy-en.txt
  http://www.howtoforge.com/high-a … artbeat-debian-etch

Haproxy的安装与基本配置

Haproxy是一种负载均衡代理软件,其特点是简单高效,在一定范围内可以替代一些专门的负载均衡设备,用于中小型网站的负载均衡绰绰有余。
Haproxy 的在RH Linux安装很简单,下载应用程序的压缩包解压出来,然后进入解压出来的目录运行make就可以了,由于其匹配规则中会用到正则表达式,所以为了让正则 匹配的效率更高,我们可以使用静态的pcre库来编译haproxy(make的时候加上参数:USE_STATIC_PCRE=1 USE_POLL= ),如果编译找不到pcre库可以下载并安装pcre库后再编译。
Haproxy的配置主要有三个部分,一个是运行时候的参数,一个是配置文件中的全局配置,还有一个是配置文件里面的代理配置部分。
运行时候直接指定的参数比较少,而且其值基本可以在全局配置部分指定,可以用-h参数查看;
全 局配置以global开始一段配置,我们日常需要配置的有几个选项,包括运行haproxy的用户组和用户名,haproxy的运行模式,比如安静模式, 调试模式,守护模式等,还有haproxy运行后开启多少个进程,可以打开的文件数,全局最大连接数限制等,全局最大连接数不能设置过大,否则可能会导致 haproxy运行不稳定,同时默认的最大连接数是比较小的,所以对于大中型网站的应用应该要修改此值;
在代理配置部分是我们实现负载均衡的主要 配置部分,此部分可以选择四个模式:default,frontend,listen,backend,我们可选其中一个作为配置段的开头,四种模式的可 配置项稍微有些不同,而其中listen模式的可配置项是最多的,其他三种模式的可配置项他都有。在这个部分普通使用我们需要配置的项也不需要很多,主要 是本机监听的ip地址和端口,监听模式:TCP或HTTP,负载均衡方式,连接超时时间,访问控制列表和对应访问控制列表的后端等,下面为配置的一个例 子,现在HAPROXY有BUG,URL的匹配规则都不能匹配上,但是我们可以不使用URL的访问控制规则,用hdr_dom和加上path的方法来实 现;另外我们对path的匹配进行了一些测试,也发现了匹配方明的问题,所以估计haproxy在正则表达式匹配方面还不够完善,所以不推荐用于七层分 派。但是haproxy强大的连接处理能力用在大量连接的四层分派还是不错的。如果你需要更详细的配置说明,请阅读作者的配置文档:########conf file for haproxy#########
global
        group           haproxy
        user            haproxy
        pidfile         /usr/local/haproxy/haproxy.pid
        daemon
        nbproc          1
        maxconn         30000frontend http_proxy
        mode            http
        bind             :80
        timeout client 3s
        acl test1    hdr_dom(host) -i www.test1.com
        acl test2    hdr_dom(host) -i www.test2.com
        acl test3    hdr_dom(host) -i www.test3.com

        use_backend test1svr if test1
        use_backend test2svr if test2
        use_backend test3svr if test3        default_backend test3svr backend test1svr
        balance         roundrobin
        mode    http
        timeout server 3s
        timeout connect 3s
      option httpchk GET /httpchk.jsp HTTP/1.1rnHost: www.test1.com
        server test1svr1 192.168.10.1:8001 check fall 5
        server test1svr2 192.168.20.1:8001 check fall 5backend test2svr
        balance         roundrobin
        mode    http
        timeout server 3s
        timeout connect 3s
      option httpchk GET /httpchk.jsp HTTP/1.1rnHost: www.test2.com
        server test2svr1 192.168.10.1:8002 check fall 5
      server test2svr2 192.168.20.1:8002 check fall 5backend test3svr
        balance         roundrobin
        mode    http
        timeout server 3s
        timeout connect 3s
      option httpchk GET /httpchk.jsp HTTP/1.1rnHost: www.test3.com
        server test3svr1 192.168.10.1:8003 check fall 5
      server test3svr2 192.168.20.1:8003 check fall 5

Squid2.6反向代理实现Web缓存加速–[小结文档]

1.Squid2.5实现多个WEB缓存加速小结文档

2.Key changes from squid 2.5

3.Changes to squid.conf

主要的改进

1、融合加速和反向功能

Major improvements to the way that Squid handles web proxy, accelerated and transparent proxy requests to make it easier to configure transparent and acceleration functionality. The default behaviour is to function as a standard HTTP proxy on each port that Squid is configured to listen on, but in addition in this release the keywords "accelerated" and "transparent" can be specified after each port to indicate to Squid the functionality that is to be enabled on that port. This means that the old config directives relating to httpd_accel_* are now deprecated.

2、行为分析

Logging enhancements to allow even greater customization of the way Squid logs requests in the access-log or to syslog if required

Support for parsing X-Forwarded-For headers allowing access controls to be based on the real client IP even if behind secondary proxies

Support for Etag and Vary HTTP headers. This further moves Squid towards HTTP/1.1 compliance. The Vary header field is used for improved caching and delivery of customized content to end clients, and the Etag is used similar to an MD5 checksum between client and server to determine if a web page has changed since it was last retrieved.

1、http_port、cache_peer规则使用

由于

httpd_accel_host 被http_port、cache_peer选项替代

httpd_accel_port 由cache_port来定义

httpd_accel_uses_host_header由http_port vhost选项替代

                     ————————-               —————————
ajax.aaa .com请求 | Squid        |        / 127.0.0.1   ajax.aaa.com    80
Sns.xxx.com请求 |                             |          211.100.100 sns.xxx.com     80           
live.yyy.com请求    — |    10.10.10.10/11   |    —- 169.100.100 live.yyy.com 81
tag.zzz.com 请求 / |    /etc/hosts      |        58.100.100 tag.zzz.com 82
                                 ————————-           —————————

http_port 110.10.10.10:80 transparent vhost vport

cache_peer 127.0.0.1 parent 80 0 no-query originserver

cache_peer 211.100.100 parent 80 0 no-query originserver

cache_peer 169.100.100 parent 81 0 no-query originserver

cache_peer 58.100.100 parent 82 0 no-query originserver

2、Log改进

A、Log记录方式更改,可用记录至系统Log或access-log,引入X-Forwarded-For headers功能后,Log可直接通过后台web的log进行分析

B、X-Forwarded-For headers功能使后端被加速web的log更加便于分析,直接分析后端web的log即可分析用户行为,原先版本后端web的log日志全来自前端squid机器,无法从后端直接分析log

Squid2.6反向代理实现多个Web缓存加速–[配置文档]

# NETWORK OPTIONS
# —————————————————————————–

http_port 211.211.211.211:80 transparent vhost vport

#
#cache_peer 211.100.59.59 parent 80 0 no-query originserver
#cache_peer 61.235.170.133 parent 80 3130 no-query no-netdb-exchange proxy-only
#cache_peer 211.101.21.114 parent 80 0 no-query originserver
#cache_peer 211.100.23.242 parent 80 0 no-query originserver
#cache_peer 61.135.120.233 parent 80 0 no-query originserver
#cache_peer 219.246.145.145 parent 80 0 no-query originserver

# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
# —————————————————————————–

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
collapsed_forwarding on

# OPTIONS WHICH AFFECT THE CACHE SIZE
# —————————————————————————–
cache_mem 256 MB
cache_swap_low 90
cache_swap_high 95
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 80 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95
cache_replacement_policy lru
memory_replacement_policy lru

# LOGFILE PATHNAMES AND CACHE DIRECTORIES
# —————————————————————————–

#cache_dir ufs /Data/apps/squid/var/cache 1024 56 256
cache_dir ufs /Data/apps/squid/cache 4096 56 256
#access_log /Data/apps/squid/var/logs/access.log squid
cache_log /Data/apps/squid/var/logs/cache.log
emulate_httpd_log on
#cache_store_log /Data/apps/squid/var/logs/store.log
# pid_filename /Data/apps/squid/var/logs/squid.pid

# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
# —————————————————————————–

dns_children 5
#Recommended minimum configuration per scheme:
#auth_param negotiate program <uncomment and complete this line to activate>
#auth_param negotiate children 5
#auth_param negotiate keep_alive on
#auth_param ntlm program <uncomment and complete this line to activate>
#auth_param ntlm children 5
#auth_param ntlm keep_alive on
#auth_param digest program <uncomment and complete this line>
#auth_param digest children 5
#auth_param digest realm Squid proxy-caching web server
#auth_param digest nonce_garbage_interval 5 minutes
#auth_param digest nonce_max_duration 30 minutes
#auth_param digest nonce_max_count 50
#auth_param basic program <uncomment and complete this line>
#auth_param basic children 5

auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

# OPTIONS FOR TUNING THE CACHE
# —————————————————————————–

# request_header_max_size 20 KB
# request_body_max_size 0 KB

refresh_pattern ^ftp:       1440   20%   10080
refresh_pattern ^gopher:   1440   0%   1440
refresh_pattern .       0   20%   4320
quick_abort_min 0 KB
quick_abort_max 0 KB
# quick_abort_pct 95
# read_ahead_gap 16 KB
# negative_ttl 5 minutes
# refresh_stale_hit 0 seconds

# TIMEOUTS
# —————————————————————————–

forward_timeout 20 seconds
connect_timeout 15 seconds
# peer_connect_timeout 30 seconds
read_timeout 3 minutes
request_timeout 1 minutes
persistent_request_timeout 15 seconds
client_lifetime 15 minutes
half_closed_clients off
# pconn_timeout 120 seconds
# ident_timeout 10 seconds
shutdown_lifetime 5 seconds

# ADMINISTRATIVE PARAMETERS
# —————————————————————————–

cache_mgr longrujun@gmail.com
cache_effective_user squid
cache_effective_group squid
# httpd_suppress_version_string off
visible_hostname longrujun.name

# OPTIONS FOR THE CACHE REGISTRATION SERVICE
# —————————————————————————-

# HTTPD-ACCELERATOR OPTIONS
# —————————————————————————–

# httpd_accel_no_pmtu_disc off

# MISCELLANEOUS
# —————————————————————————–

logfile_rotate 0
tcp_recv_bufsize 65535 bytes
# memory_pools on
# memory_pools_limit 5 MB
# via on
# forwarded_for on
# log_icp_queries on
# icp_hit_stale off
# minimum_direct_hops 4
# minimum_direct_rtt 400
# store_avg_object_size 13 KB
# store_objects_per_bucket 20
# client_db on
# netdb_low 900
# netdb_high 1000
# netdb_ping_period 5 minutes
# query_icmp off
# buffered_logs off
# reload_into_ims off
# global_internal_static on
# short_icon_urls off
error_directory /Data/apps/squid/share/errors/Simplify_Chinese
# maximum_single_addr_tries 1
# retry_on_error off

# DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option)
# —————————————————————————–

# delay_initial_bucket_level 50
# max_open_disk_fds 0
# offline_mode off
# uri_whitespace strip
# nonhierarchical_direct on
# prefer_direct off
# coredump_dir none
coredump_dir /Data/apps/squid/cache
# redirector_bypass off
# ignore_unknown_nameservers on
# digest_generation on
# digest_bits_per_entry 5
# digest_rebuild_period 1 hour
# digest_swapout_chunk_size 4096 bytes
# digest_rebuild_chunk_percentage 10
client_persistent_connections off
server_persistent_connections on
# persistent_connection_after_error off
# detect_broken_pconn off
# balance_on_multiple_ip on
# pipeline_prefetch off
# request_entities off
# high_response_time_warning 0
# high_page_fault_warning 0
# high_memory_warning 0
# store_dir_select_algorithm least-load
# ie_refresh off
vary_ignore_expire on
# sleep_after_fork 0
# minimum_expiry_time 60 seconds
# relaxed_header_parser on
strip_query_terms on

# ACCESS CONTROLS
#—————————————————

acl OverConnLimit maxconn 20
http_access deny OverConnLimit

#acl AntiGoogle req_header User-Agent Googlespider
#http_access deny AntiGoogle

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255 10.10.10.0/24
acl Srvip   dst 211.100.99.0/24 211.100.100.0/24 61.135.100.0/24 60.195.200.159.0/24
acl Srvdm   dstdomain .longrujun.name .hanlei.name .liuren.com .keso.cn
acl to_localhost dst 127.0.0.0/8 61.135.170.231/255.255.255.255
acl purgehost src   127.0.0.0/8 61.135.170.231/255.255.255.255
acl purgemethod method PURGE   
acl SSL_ports port 443 563
acl Safe_ports port 80          # http  
acl Safe_ports port 81          # http
acl CONNECT method CONNECT     

always_direct allow Srvdm
never_direct allow !Srvdm
http_access allow manager localhost
http_access deny manager
http_access allow purgemethod purgehost
http_access deny !Safe_ports
http_access deny CONNECT all
http_access allow localhost
http_access allow Srvip
http_access allow Srvdm
http_access deny all
http_reply_access allow all
icp_access deny all
icp_port 0