如何在Nginx中提供嵌套项目

时间:2017-08-09 13:35:54

标签: regex git laravel nginx lumen

我有一个带有多个git标签的Lumen api项目,用于api版本控制。所以我必须部署项目的多个签出。

服务器上的文件夹结构如下所示:

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

现在我想通过nginx提供服务,以便网址看起来像这样。

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

我用regexp尝试了很多,但没有真正有效。我希望你能帮助我。

1 个答案:

答案 0 :(得分:3)

您需要使用正则表达式BRANCH语句捕获server_name。有关详情,请参阅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;
            ...
        }
    }
}