使用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;

}

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_test;

}