2017-08-09 97 views
1

我有一個帶有多個git標籤的Lumen api項目,用於api版本控制。所以我必須部署多個項目結賬。如何在Nginx中爲嵌套項目提供服務

服務器上的文件夾結構如下所示:

var 
    www 
    api-staging 
     master 
     v1 
      public 
      index.php 
      ... 
     v2 
      public 
      index.php 
      ... 
     lastest 
      public 
       index.php 
      ... 
     ... 

現在,我想通過nginx的服務項目,使URL看起來是這樣的。

http://BRANCH.domain.tld/VERSION/例如, http://master.domain.tld/lastest/

我試了很多正則表達式,但沒有真正起作用。我希望你能幫助我。

+0

只需設置爲每個文件夾結構的不同的虛擬主機。 – Suraj

+0

@Suraj我想阻止這一點。此外,與分支數量這是不可能的。 –

回答

3

您將需要使用正則表達式server_name語句捕獲BRANCH。有關更多信息,請參閱this document

根通過附加/public到捕獲VERSION,這需要一個正則表達式locationalias語句構成。有關更多信息,請參閱this document

例如:

server { 
    ... 
    server_name ~^(?<branch>.+)\.domain\.tld$; 

    location ~ ^/(?<version>[^/]+)/(?<name>.*)$ { 

     alias /var/www/api-staging/$branch$version/public/$name; 

     if (!-e $request_filename) { rewrite^$version/index.php last; } 

     location ~ \.php$ { 
      if (!-f $request_filename) { return 404; } 
      include fastcgi_params; 
      fastcgi_param SCRIPT_FILENAME $request_filename; 
      ... 
     } 
    } 
} 
+0

有沒有辦法做到這一點,如果版本號是通過請求頭而不是服務器url域傳遞的? – ayip

+1

當然。請求頭的值可通過'$ http_'變量族獲得。在'alias'語句中可以使用適當的變量。 –

相關問題