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

Versionized URLs in nginx for multiple FastCGI ASP.NET Mono Backends

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

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

Mono 应用程序本身始终在根路径上侦听 "/"。 我假设我将不得不修改位置指令和 fastcgi_params,但我不知道我必须调整哪个 fastcgi_params 才能使其工作。

示例用例:

转发到 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 /;
}

我不确定我使用位置指令的方法是否完全正确,有什么想法吗?

/编辑:这是我想出的解决方案。显然不需要其他 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        /;
}

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

您可能还需要修改 SCRIPT_NAMEDOCUMENT_URI

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