一、squid用法详解
1.正向代理
(1).ACL设置
- acl all src 0.0.0.0/0.0.0.0 访问的源地址
- acl manager proto cache_object proto协议
- acl localhost src 127.0.0.1/255.255.255.255
- acl to_localhost dst 127.0.0.0/8 目标地址
- acl SSL_ports port 443
- acl Safe_ports port 80 # http
- acl Safe_ports port 21 # ftp
- acl Safe_ports port 443 # https
- acl Safe_ports port 70 # gopher
- acl Safe_ports port 210 # wais
- acl Safe_ports port 1025-65535 # unregistered ports
- acl Safe_ports port 280 # http-mgmt
- acl Safe_ports port 488 # gss-http
- acl Safe_ports port 591 # filemaker
- acl Safe_ports port 777 # multiling http
- acl CONNECT method CONNECT外部协议的方法
(2).ACL设置还得通过http_access来控制其访问控制权限,根据先后次序匹配,如果匹配到,就不会向下再处理了,所以一般严格的规则放在上面
- http_access allow manager localhost
- http_access deny manager
- http_access deny !Safe_ports
- http_access deny CONNECT !SSL_ports
- http_access allow localhost
- http_access deny all
(3).第一次启动squid,会自动创建一个用于存放缓存的目录,如果遇到这个错误
是因为squid不识别主机名,在squid.conf中添加visible_hostname HOSTNAME即可
在其缓存目录中可以看到,他的目录是根据十六进制来定义的,squid是分类存放
设置代理,启动rs2,修改其firefox浏览器的代理选项
(4).常见的acl列表类型有
- src
- acl all src 0.0.0.0./0.0.0.0
- http_access deny all
- dst 通过hosts反解ip地址
- port
- srcdomain
- dstdomain
- time访问时间
- acl acltime time M 9:00-17:00周一的9点到17点
- maxconn最大连接数
- url_regex url判断
- acl reject url_regex -i ^http://www.google.cn.in/index.html
- http_access deny reject即拒绝用户访问http://www.google.cn.in/index.html
- urlpath_regex url路径中匹配 acl reject urlpath_regex -i index.html
- http_access deny reject
2.反向代理
- http_port 172.16.133.11:80 vhost
- cache_peer 172.16.133.12 parent 80 0 originserver weight=5 max-conn=30
- 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
- NFILES=131072最大能打开的文件个数
- MEMLOCK=82000使用多大的共享内存
- RELOAD_VCL=1是否自动加载vcl配置文件
- 4种模式,默认使用第三种
- VARNISH_VCL_CONF=/etc/varnish/default.vcl vcl配置文件路径
- VARNISH_LISTEN_PORT=6081监听端口
- VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1管理监听地址
- VARNISH_ADMIN_LISTEN_PORT=6082管理监听端口
- VARNISH_SECRET_FILE=/etc/varnish/secret管理端口的加密文件
- VARNISH_MIN_THREADS=1最小线程数
- VARNISH_MAX_THREADS=1000最大线程数
- VARNISH_THREAD_TIMEOUT=120最大超时时间
- VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin缓存数据的文件
- VARNISH_STORAGE_SIZE=1G指定文件最大值是1G
- VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"
- VARNISH_TTL=120当页面没设置时,默认缓存多久
- DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
- -f ${VARNISH_VCL_CONF} \
- -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
- -t ${VARNISH_TTL} \
- -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
- -u varnish -g varnish \
- -S ${VARNISH_SECRET_FILE} \
- -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
负载均衡
- backend server1 {
- .host = "172.16.133.22";
- .port = "80";
- .probe = {
- .url="/";
- .interval = 5s;
- .timeout = 1s;
- .window = 5;
- .threshold = 3;
- }后台健康检测
- }
- backend server2 {
- .host = "172.16.133.12";
- .port = "80";
- .probe = {
- .url="/";
- .interval = 5s;
- .timeout = 1s;
- .window = 5;
- .threshold = 3;
- }
- }
- director example_director round-robin {
- {
- .backend = server1;
- weight=1;
- }
- {
- .backend = server2;
- weight=1;
- }
- }
- sub vcl_recv {
- set req.backend = myload;
- }
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当前的工作状况