2017-08-09 48 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'语句中可以使用适当的变量。 –

相关问题