Nginx 灰度发布方法总结

287 阅读1分钟

一、通过负载均衡-调节权重

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

http {   
    upstream cluster {
        ip_hash; #如果你的系统中没有使用第三方缓存管理工具 ,建议使用此方式    
        server 192.168.1.210:80 weight=5;     
        server 192.168.1.211:80 weight=3;     
        server 192.168.1.212:80 weight=1;   
    }   
    server {
        listen 80;   
        location / {   
            proxy_pass http://cluster;     
        }   
    } 
} 

二、通过Nginx+lua实现

由于使用了nginx+lua模块,这种方式适合很多场景,非常强大,但是问题是你可能需要学习很多lua的语法。

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