split_clients模块默认已经编译进Nginx , 通过–without-http_split_clients_module 禁用。
功能:
1、基于已有变量创建新变量,可为实现AB测试提供更多的可能性。
2、对已有变量的值执行MurmurHash2算法得到32位整型哈希数字,记为hash。
3、32位无符号整型的最大数字2^32-1,记为max。
4、哈希数字与最大数字相除hash/max,可以得到百分比percent。
5、配置指令中只是了各个百分比构成的范围,如0-1%,1%-5%等,及范围对应的值。
6、当percent落在哪个范围里,新变量的值就对应着其后的参数。
已有变量
1、字符串
2、一个或多个变量
3、变量与字符串的组合
case规则
1、xx.xx% ,支持小数点后2位,所有项的百分比相加不能超过100% 。
2、* ,由它匹配剩余的百分比(100%减去以上所有相加的百分比)。
split_clients指令
Syntax: split_clients string $variable { ... }
Default: ---
Context: http
http {
lua_shared_dict nginxcache 60m;
include mime.types;
default_type application/octet-stream;
log_format session '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'upstream_cache_status=$upstream_cache_status '
'"$http_user_agent" "$http_x_forwarded_for" "request_time $request_time"';
access_log logs/access.log session;
error_log logs/error.log error;
sendfile on;
keepalive_timeout 65;
client_max_body_size 2m;
client_body_buffer_size 512k;
proxy_cache_revalidate on;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_cache_lock_timeout 6s;
proxy_cache_lock_age 6s;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path ../proxy_temp;
upstream upstream {
server 192.168.1.10:8080 max_fails=1 fail_timeout=1m;
}
#可是怎么让请求均匀的分配到这三块盘上呢,一般是配置split_clients方法,方法如下:
split_clients $request_uri $disk {
33% disk1;
33% disk2;
* disk3;
}
#nginx做缓存的时候,可能用到多快盘。比如如下配置:
proxy_cache_path /disk1 levels=1:2 keys_zone=cache_disk1:600m max_size=10g inactive=7d use_temp_path=off;
proxy_cache_path /disk2 levels=1:2 keys_zone=cache_disk2:600m max_size=10g inactive=7d use_temp_path=off;
proxy_cache_path /disk3 levels=1:2 keys_zone=cache_disk3:600m max_size=10g inactive=7d use_temp_path=off;
server {
listen 8080;
server_name localhost;
#之后在location中配置如下:
location ~ (amber\.um38)$ {
proxy_pass http://upstream;
add_header Nginx-Cache "$upstream_cache_status";
proxy_cache_valid 10s;
proxy_cache_key $uri;
proxy_cache cache_$disk;
}
}
}