使用Nginx+Lua实现Web项目的灰度发布


1.问题:小团队,快速迭代开发,版本发布没有经过测试就要放出去,怎样在内网测试过后在外网能在真实环境让内部人员再过一次测试且不影响外网用户

2.实现思想:

a.至少要有两台机器

b.公司是统一出口IP

c.根据IP将请求转发到不同的机器

3.nginx配制:

location / {
content_by_lua '
myIP = ngx.req.get_headers()["X-Real-IP"]
if myIP == nil then
myIP = ngx.req.get_headers()["x_forwarded_for"]
end
if myIP == nil then
myIP = ngx.var.remote_addr
end
if myIP == "公司出口IP" then
ngx.exec("@client")
else
ngx.exec("@client_test")
end
';
}

location @client{
proxy_next_upstream     error timeout;
proxy_redirect          off;
proxy_set_header        Host $host;
#proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Real-IP $http_x_forwarded_for;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    100m;
client_body_buffer_size 256k;
proxy_connect_timeout   180;
proxy_send_timeout      180;
proxy_read_timeout      180;
proxy_buffer_size       8k;
proxy_buffers           8 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_pass http://client_gamebox;

}
location @client_test{
proxy_next_upstream     error timeout;
proxy_redirect          off;
proxy_set_header        Host $host;
#proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Real-IP $http_x_forwarded_for;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    100m;
client_body_buffer_size 256k;
proxy_connect_timeout   180;
proxy_send_timeout      180;
proxy_read_timeout      180;
proxy_buffer_size       8k;
proxy_buffers           8 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_pass http://client_gamebox_test;
}

添加新评论 »