需求:后台服务变动比较大,需要上线.iOS版本已经开发完,准备提交审核.但是web端还是老的代码,后台还不能部署正式环境.
客户端会在每个请求中都带有一个头叫做"Accept",例如这里的"Accept":"application/vnd.demo.v2.0+json".
nginx中会提取出这个header,然后将v2.0版本的请求转发到预发布环境,其他版本的请求则依旧转发到生产环境.
以后web和android上线的时候,只需要直接把v2对应的跳转代码删了即可.
虽然也有其他的方式处理,例如加入一个"/v2"的location判断,但是觉得这样太恶心了,以后免不了一直留着这个多余的"/v2"或者还会有其他"/v3","/v4"...
OK,话说回来,下面是nginx示例代码.
map $http_accept $version {
default "";
"application/vnd.demo.v2.0+json" "v2.0";
}
server {
listen 80;
server_name demo.io;
charset utf-8;
autoindex off;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Ssl on;
if ($version="v2.0"){
proxy_pass http://demo_release;
break;
}
proxy_pass http://demo_production;
}
}