灰度發布,簡單來說,就是根據各種條件,讓一部分用戶使用舊版本,另一部分用戶使用新版本。
nginx 的語法本身可以看作是一門小型的編程語言,通過簡單的編程,可以輕松實現基於IP的灰度發布。
需求:搭建准生產環境,供開發人員/運維在線上做最后的調整。如果OK,直接用rsync推送至生產環境。
條件:辦公室網絡出口有固定IP
解決辦法:
nginx 負載均衡器判斷客戶端IP地址,
如果是辦公室IP,則反向代理到准生產環境;
如果不是,則反向代理到生產環境。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
upstream prod {
server 192.168.1.10;
server 192.168.1.11;
}
upstream pre-prod {
server 192.168.1.100;
}
server {
listen 80;
access_log
/var/log/nginx/access
.log main;
set
$web_backend prod;
if
($remote_addr ~
"123.123.123.123"
) {
set
$web_backend pre-prod;
}
location / {
proxy_pass http:
//
$web_backend;
include proxy.conf;
}
}
|
同理,也可以根據不同的IP,設置不同的網站根目錄,達到相同的目的。
1
2
3
4
5
6
7
8
9
10
11
|
server {
listen 80;
access_log
/var/log/nginx/access
.log main;
set
$rootdir
"/var/www/html"
;
if
($remote_addr ~
"123.123.123.123"
) {
set
$rootdir
"/var/www/test"
;
}
location / {
root $rootdir;
}
}
|
同理,還可以利用geoip做基於地理位置的灰度發布,不詳細介紹。
注: set 命令依賴rewrite 模塊。