Nginx:根据参数值使用不同的后端

时间:2014-07-18 17:43:50

标签: nginx fastcgi proxypass

我们有一个用PHP编写的遗留应用程序,我们现在正在迁移到java。 该应用程序非常重要,我们正在尝试部分迁移功能。 记住这个场景,我需要根据查询字符串参数的值在php-fpm后端和java应用程序之间分配流量

例如 if $ format =" csv&#34 ;,使用php使用fast-cgi和process请求 如果$ format =" xml&#34 ;,使用proxy_pass指令连接到java后端。

不幸的是,我发现很难在nginx上做到这一点。

我尝试了以下

if ($args_format ="csv")
 include php;
if ($args_format ="xml")
 include proxy;

这里php和proxy是包含proxy_pass和fast-cgi相关语句的文件

不幸的是,这会引发语法错误

然后我使用类似

的东西创建地图
map $args_output $provider {
  default "proxy";
  csv      "php";
}
然后做了一个      包括$ provider;

这也失败了,因为nginx似乎在开始时而不是在每次调用执行期间加载包含。

关于如何以优雅的方式实现这一目标的任何建议。

1 个答案:

答案 0 :(得分:0)

变量名称为 $ arg_format http://nginx.org/en/docs/http/ngx_http_core_module.html#var_arg_

您必须在if语句后使用{}。 http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if

尝试类似......

if ($arg_format ="csv") {
 include php;
}
if ($arg_format ="xml") {
 include proxy;
}