nginx中用于多个FastCGI ASP.NET Mono后端的版本化URL

时间:2015-11-11 13:15:16

标签: asp.net nginx mono servicestack fastcgi

我计划在nginx后面使用FastCGI运行多个ASP.NET应用程序。

这些多个应用程序的二进制文件不同,我希望nginx根据其URI将请求转发到相应的ASP.NET应用程序。

Mono应用程序本身始终在根路径"/"上进行侦听。 我假设我不得不修改位置指令和fastcgi_params,但我不知道哪些fastcgi_params我必须改变以使其工作。

示例用例:

  • http://www.server.com/api/1/status应转发到在TCP端口9000上运行的FastCGI应用程序,请求URI应重写为/status
  • http://www.server.com/api/2/status应转发到在TCP端口9001上运行的FastCGI应用程序,请求URI也应重写为/status以匹配ASP.NET侦听器配置。

转发到FastCGI时,应删除URI的/ api / {version}部分。

我试过这个nginx配置,ASP.NET是通过FastCGI调用的,但无法处理请求:

location ~ /api/1/(.*) {
    root   /usr/aspnet/;
    fastcgi_pass 127.0.0.1:9000;
    include /etc/nginx/nginx-fastcgi-params.conf;
    fastcgi_param  REQUEST_URI /$1;
}

我不确定我的位置指令方法是否正确,是否有任何想法?

/编辑:这是我提出的解决方案。显然不需要其他fastcgi_params:

location ~ ^/api/1/(.*)$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  SCRIPT_NAME        /$1;
}

1 个答案:

答案 0 :(得分:2)

除非您确切知道控制器正在使用哪些fastcgi_param参数,否则您应该控制它们并将/etc/nginx/nginx-fastcgi-params.conf的内容粘贴到位置容器中,而不是包含文件,至少在此之前把它全部搞定。

您可能还需要修改SCRIPT_NAMEDOCUMENT_URI

您的位置正则表达式应以^为前缀,并以$为后缀,以消除任何歧义(而不是与手头的问题有关)。