我计划在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;
}
答案 0 :(得分:2)
除非您确切知道控制器正在使用哪些fastcgi_param
参数,否则您应该控制它们并将/etc/nginx/nginx-fastcgi-params.conf
的内容粘贴到位置容器中,而不是包含文件,至少在此之前把它全部搞定。
您可能还需要修改SCRIPT_NAME
和DOCUMENT_URI
。
您的位置正则表达式应以^
为前缀,并以$
为后缀,以消除任何歧义(而不是与手头的问题有关)。