nginx:基于cookie的不同configuration

我们正在研究我们网站的一个主要重构。 为了推广,我们希望开始发送一小部分用户到新版本。 我们不希望他们在新旧之间来回切换,所以我们打算在第一次访问时设置一个cookie,然后用它来决定做什么。

我们知道如何使所有这些工作,除了改变基于cookie的nginxconfiguration。 除了我们需要使用不同的根之外,configuration大部分是相同的,而且两者之间的try_files是不同的,因为旧版本的结构像page_name / index.php,新版本通过一个index.php文件路由所有内容。

为了更改基于cookie的根,我使用地图工作,但我不知道如何处理try_files部分。 我试图避免使用,如果基于if-is-evil。 旧版本根本不使用try_files,新版本使用try_files $uri $uri/ /index.php?$args;

如果在这种情况下使用或不使用,最好的方法是什么?

我想我们可以用openresty来处理这个问题

这里是例子

nginx的conf文件

 server { listen 8081; server_name localhost; location / { content_by_lua_block { ngx.say('8081 version') } } } server { listen 8082; server_name localhost; location / { content_by_lua_block { ngx.say('8082 version') } } } server { listen 80; server_name localhost; location / { set $versionupstream ""; rewrite_by_lua_block { local newcookie = ngx.var.cookie_Foo if newcookie == "bar" then ngx.var.versionupstream = "127.0.0.1:8081" else ngx.var.versionupstream = "127.0.0.1:8082" end } proxy_pass http://$versionupstream; } } 

testing一下

演示它

我相信这只有在NGINX Plus使用sticky route才能实现。

看看https://www.nginx.com/blog/performing-ab-testing-nginx-plus/