记录Nginx服务器的Split Clients模块配置过程
ngx-http-split-clients模块基于一些特定条件分开客户端连接,(例如ip地址,请求头,cookies等)
示例配置:
http{ split-clients"${remote-addr}AAA"$variant{ 0.5%.one; 2.0%.two; -""; } server{ location/{ indexindex${variant}.html;
可以使用$cookie-…作为来源来分离请求,来源字符串使用CRC32进行哈希计算并且哈希百分比将作为来源的值。
指令
split-clients
语法:split-clients$variable{…}
默认值:none
使用字段:http
发现模块官网wiki给的上面的示例配置代码有几点问题,我编译安装后,按照wiki的方法配置nginx.conf报错。
我实际的代码是:
http{ split_clients"${remote_addr}AAA"$variant{ 0.5%.one; 2%.two; 3%.eric; 4%.yang; 50%.thr; *""; } server{ location/{ indexindex${variant}.html; }
然后新建几个文件
cd/usr/local/nginx/html/ echo"one">index.one.html echo"two">index.two.html echo"eric">index.eric.html echo"thr">index.thr.html
配置差别:
wiki:split-clientseric:split_clients wiki:remote-addreric:remote_addr wiki:-"";eric:*"";关于这些错误的发现是因为nginx有remote_addr变量并没有remote-addr·我就顺藤摸瓜·
随后我来讲下SplitClients模块的一点点知识,我自己时间测试出来的~
关于测试,我们在nginx的错误日志上输出${variant}变量
log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for""$variant"';以便于我们测试结果。
SplitClients的模块模块是切割客户端IP然后然后使用CRC32的算出一个值去匹配·
在俄文网站上翻译出这么一段:
该指令创造了A/B分割一变
测试,例如:
http{ split_clients"${remote_addr}AAA"$variant{ 0.5%.one; 2%.two; *""; }
原来的字符串变量的值是哈希
使用CRC32的。在这个例子中,当
哈希值从0到21474836(0.5%),变量$变种
有值“。之一”。如果哈希值21474837
至107374182(2%)-“。两个”。而如果从107374183哈希值
4294967297-“”。
也就是说,比如我的IP地址是192.168.1.29服务器IP为192.168.1.28
当我访问nginx的时候,nginx会切割我的IP地址匹配到.1
日志:
192.168.1.29--[01/Apr/2011:15:39:17+0800]"GET/HTTP/1.1"403571"-""Mozilla/4.0(compatible;MSIE8.0;WindowsNT5.1;Trident/4.0)""-"".thr"