灰度發佈,簡單來講,就是根據各類條件,讓一部分用戶使用舊版本,另外一部分用戶使用新版本。html
nginx 的語法自己能夠看做是一門小型的編程語言,經過簡單的編程,能夠輕鬆實現基於IP的灰度發佈。nginx
需求:搭建準生產環境,供開發人員/運維在線上作最後的調整。若是OK,直接用rsync推送至生產環境。
web
條件:辦公室網絡出口有固定IP
編程
解決辦法:bash
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作基於地理位置的灰度發佈,不詳細介紹。ide
注: set 命令依賴rewrite 模塊。
本文出自 「專一Linux 運維」 博客,請務必保留此出處http://purplegrape.blog.51cto.com/1330104/1403123