lvs squid相关
http://zh.linuxvirtualserver.org/
这几天在要对用户请求过来的post 的body内容进行处理,就具体了解了一下squid 处理post请求的具体流程,在这里具体分享一下。具体描述如下:
1、当一个请求到达squid,squid首先读取用户请求的内容,调用的函数是clientReadRequest,在clientReadRequest后,squid获取了客户端发来的请求内容,主要是header头,如果body较小的话,也会把body内容带过来,
2、squid读完请求后便开始尝试解析请求,进入函数clientTryParseRequest,解析请求的时候会判断方法是不是post, post请求的content-length值是多少,如果content-length头存在,且大于0,就会设置相应的request->body_reader = clientReadBody,request->body_reader_data = conn,其实就是设置读body的函数,这里如果body大于squid设置的限制的话,请求就会被丢弃。
3、这样就进入了squid处理请求的通用流程中(相应的acl校验-->clientProcessRequest-->MISS流程-->fwdStart-->httpStart-->httpSendRequest)在httpSendRequest中,会首先发送header到源站,然后进入httpSendRequestEntry流程,
4、httpSendRequestEntry函数,调用requestReadBody 函数,并设置body的处理函数为httpRequestBodyHandler,requestReadBody函数读取会调用先前第2步注册的request->body_reader回调,也就是clientReadBody函数从conn.in.buf中将body数据读出来,然后clientReadBody函数调用clientProcessBody函数,clientProcessBody 就数处理body的函数,在这里就是调用在第4步开头提到的body处理函数httpRequestBodyHandler,来处理body
5、body作何处理呢?当然是发送给源站,在将body发给源站后,如果发现还有body需要读,需要处理就又要进入第4步的httpSendRequestEntry流程。如果body已经读完、发完,就要进入httpSendRequestEntryDone,做发送完成的处理。
以上就是squid处理post请求的主要流程,但是看完以上流程,您可能还不了解squid读到客户端的body,如果body很大,一次读不完需要多次读的情况下,以上过程是怎么联动起来的呢?这就要重新回到第一步,去解读clientReadRequest函数了,毕竟所有的用户的数据都是从这里读入的。
在clientReadRequest函数中,在读到用户数据以后,把这些数据当做请求处理之前,会判断conn->body.callback是否为空,如果不为空就直接调用clientProcessBody,这样就进入了上面的第4步啦。而第4步中提到的httpRequestBodyHenadler正式这个conn->body.callback,这样的话,clientReadRequest读到的数据就能直接发送到源站了,在此你可以体会到callback这类回调函数的威力了把!!
如有疑问欢迎回帖一起讨论。
from:http://blog.sina.com.cn/s/blog_68d83f050100otey.html
lvs squid相关的更多相关文章
- CentOS下LVS DR模式负载均衡配置详解
一安装LVS准备: 1.准备4台Centos 6.2 x86_64 注:本实验关闭 SELinux和IPtables防火墙. 管理IP地址 角色 备注 192.168.1.101 LVS主调度器(Ma ...
- LVS+Keepalived实现DBProxy的高可用
背景 在上一篇文章美团点评DBProxy读写分离使用说明实现了读写分离,但在最后提了二个问题:一是代理不管MySQL主从的复制状态,二是DBProxy本身是一个单点的存在.对于第一个可以通过自己定义的 ...
- lvs学习笔记
本人身为一个网工,最近一直在工作中学习linux的相关知识.前短时间通过自查资料学习了lvs的相关内容,摘录部分整理后和大家分享,内容较多,较琐碎,望见谅!!! LVS 从Linux内核版本2.6起, ...
- 高并发场景 LVS 安装及高可用实现
1.1 负载均衡介绍 1.1.1 负载均衡的妙用 负载均衡(Load Balance)集群提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网 ...
- LVS DR模式配置
关于LVS的相关介绍,以下两篇文章均做了具体的介绍: http://www.linuxvirtualserver.org/zh/lvs1.html http://www.cnblogs.com/liw ...
- LVS负载均衡之持久性连接介绍(session篇)
在实际生产环境中,往往需要根据业务应用场景来设置lvs的会话超时时间以及防session连接丢失的问题提,如在业务支付环节,如若session丢失会导致重复扣款问题,严重影响到安全性,本小节解将会讲到 ...
- 利用Squid + DNSPOD 搭建CDN服务器
首先下载squid for windows安装包 squid-2.7.STABLE5-bin.zip 然后解压缩,放到C盘squid目录内. 进入目录C:\squid\etc内,将所有文件的.defa ...
- Linux实战教学笔记42:squid代理与缓存实践(一)
第1章 Squid介绍 1.1 缓存服务器介绍 缓存服务器(英文意思cache server),即用来存储(介质为内存及硬盘)用户访问的网页,图片,文件等等信息的专用服务器.这种服务器不仅可以使用户可 ...
- 教你用squid做CDN把公司做到上市
我们都知道CDN(内容分发网络)是用来给网站加速用的,通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络的“边缘”,使用户可以就近取得所需的内容,以提高用户访问网站 ...
随机推荐
- EasyPlayerPro(Windows)流媒体播放器功能介绍及应用场景
EasyPLyerPro(Windows)经过为期一个月的开发已经基本完成,虽然目前仍存在一些小问题,但是总体功能还是趋于比较稳定和强大的,下面对其功能和应用场景做简要介绍. 一.EasyPlayer ...
- 随机生成指定长度的密码之---Random
随机生成指定长度的密码思路: 1.密码中可能包含字母,数字,特殊符号,为了区别分别定义常量 2.随机生成密码,自然想到要用到java.util.Random 类 3.定义一个带两个参数的方法,1跟2, ...
- 九度OJ 1027:欧拉回路 (欧拉回路)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2989 解决:1501 题目描述: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是 ...
- Dominant Resource Fairness: Fair Allocation of Multiple Resource Types
Dominant Resource Fairness: Fair Allocation of Multiple Resource Types
- BZOJ4829: [Hnoi2017]队长快跑
BZOJ4829: [Hnoi2017]队长快跑 Description 众所周知,在P国外不远处盘踞着巨龙大Y. 传说中,在远古时代,巨龙大Y将P国的镇国之宝窃走并藏在了其巢穴中,这吸引着整个P国的 ...
- java 线程 被相互排斥堵塞、检查中断演示样例解说----thinking java4
package org.rui.thread.block; /** * 被相互排斥堵塞 就像在interrupting.java中看到的,假设你偿试着在一个对象上调用其synchronized方法, ...
- 十分钟git-服务器搭建ssh登陆
QQ820688215 微信公众号: 1首先,创建一个操作系统用户 git,并为其建立一个 .ssh 目录. $ sudo adduser git $ su git $ cd $ mkdir .ssh ...
- 设计模式 - 单件模式(singleton pattern) 具体解释
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/28595349 单件模式(singleton ...
- Java for LeetCode 133 Clone Graph
Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...
- Hadoop- HDFS的Safemode
Hadoop- HDFS的Safemode hadoop启动时,NameNode启动完后就开始进入安全模式,等待DataNode向NameNode发送block report ,当datanode b ...