ab-test請參考百度百科的解釋,對互聯(lián)網(wǎng)從業(yè)者來說,這個非常熟悉。我最近在一個項目里折騰lua,順便實現(xiàn)了常用的兩種灰度方案。
我們不把時間浪費在安裝編譯,這里直接使用已經(jīng)將nginx,lua組合在一起的openresty,安裝過程請參考官方Install指南。
為了方便策略選擇和切換,我們把2個緯度的配置分別放在不同的文件里,具體使用哪個策略,在域名的主配置中啟用即可。
--添加ip后無需重啟nginx,但刪除ip需要reload生效 local ip_config = ngx.shared.config; ClienIP=ngx.req.get_headers()["X-Real-IP"] if ClientIP == nil then ClientIP = ngx.req.get_headers()["x_forworded_for"] end if ClientIP == nil then ClientIP = ngx.var.remote_addr end-- ip列表配置放在nginx/conf目錄下 for line in io.lines("../conf/iplist.txt") do if not ip_config:get(line) then ip_config:set(line, "0") end end if ip_config:get(ClientIP) == "0" then ngx.exec("@gray_env") else ngx.exec("@product_env") end
local uin = ngx.var.cookie_loginuin--取cookies里的loginuin字段,末尾被2整數(shù)的灰度
if uin ~= nil and string.sub(uin,string.len(uin))%2 == 0 then ngx.exec("@gray_env")else ngx.exec("@product_env")end
...#http
lua_code_cache off;#正式上線記得打開cache
lua_package_path "/usr/local/openresty/lualib/?.lua;;"; lua_shared_dict config 1m; ...#server
location / { #access_by_lua_file conf/lua/ip_gray.lua; access_by_lua_file conf/lua/cookies_gray.lua; } location @gray_env { proxy_pass http://gray_env; proxy_set_header Host $http_host; } location @product_env { proxy_pass http://product_env; proxy_set_header Host $http_host; }
聯(lián)系客服