我打算讓多個ASP.NET應用程序在FastCGI後面運行nginx。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時,應刪除/ api/{version}部分的URI。
我想這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;
}
謝謝。我花了一些時間來深入瞭解哪些變量是ASP.NET真正需要的。我結束了這一點,這是工作的意圖:'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; }' – derFunk