2015-11-11 58 views
2

我打算讓多個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; 
} 

回答

2

除非你知道控制器使用,你應該把他們的控制和/etc/nginx/nginx-fastcgi-params.conf內容粘貼到該位置容器,而不是包括文件到底是哪fastcgi_param參數,至少在你完成所有工作之前。

您可能還需要修改SCRIPT_NAMEDOCUMENT_URI

您的位置正則表達式應帶有前綴^並加上$以消除任何不明確之處(與手頭問題沒有任何關係)。

+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