Nginx配置多个Yii2高级项目位置(部署开发)

时间:2017-03-27 11:43:40

标签: php nginx yii2 yii2-advanced-app api-design

我正在尝试为分离文件夹上的多个版本的一个项目设置ningx服务器文件。我读了很多不同的概念和解决方案,但没有到达任何地方,我不知道什么是正确的,所以..

目的是建立一个良好的架构,同时开发具有不同功能的API,但不想合并到我们的DEV分支,如:

  • api.example.com/v1/user/auth(< strong> dev )
  • api.example.com/ 功能/ my-new-branch / v1 / user / auth( my-new-branch

1。结构

/var/www/html/project-api/
    /dev/ 
      api/ <- Advanced Yii2 Environment as frontend/backend
        modules/
          v1/
            controllers/
            models/
        web/
          index.php
      common/
      vendor/
      ...

    /my-new-branch/
      api/
        modules/
          v1/
            controllers/
            models/
        web/
          index.php
      common/
      vendor/
      ...
    /*/ <- Deploying more equal branches for in progress features

2。 nginx的

server {
    listen 80;

    root /var/www/html/project-api/src/api/web;
    index index.php index.html index.htm;

    server_name api.example.com;

    error_log /var/log/nginx/project-api/dev-error.log notice;
    access_log off;

    location / {
      try_files $uri $uri/ /index.php$is_args$args;
    }

    ## Features (not working)
    location ~* ^/features/my-new-branch/(.+)$ {
      root /var/www/html/project-api/my-new-branch/api/web;
      try_files /api/web/$1 /api/web/$1/ /features/my-new-branch/index.php?$args;
      index /features/my-new-branch/$1/index.php;

      location ~ /\.(ht|git) {
        deny all;
      }

      location ~ \.php$ {
        try_files $uri =404;

        fastcgi_param SCRIPT_FILENAME $document_root/api/web/$1;
        fastcgi_pass unix:/var/run/php/php-fpm.sock;

        include fastcgi_params;
      }
    }
    ###########

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
      root /usr/share/nginx/html;
    }

    # pass the PHP scripts to FastCGI server listening on socket
    #
    location ~ \.php$ {

      try_files $uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass unix:/var/run/php-fpm.sock;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param SCRIPT_NAME $fastcgi_script_name;
      fastcgi_index index.php;

      include fastcgi_params;
    }

    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
      access_log        off;
      log_not_found     off;
      expires           30d;
    }

    # deny access to . files, for security
    #
    location ~ /\. {
      log_not_found off;
      deny all;
     }
}

我有当前的服务器配置服务我的开发分支作为普通的php网站,但我没有为多个php项目nginx找到一个好的解决方案,这个结构在不同的根和公共文件夹(web)上。

任何解决方案? Alias root 重写 sublocations ..?

(稍后)将我们的“ my-new-branch ”作为变量以使其动态化,因为我在项目文件夹中部署了新功能。

感谢

1 个答案:

答案 0 :(得分:0)

您可以使用别名,根,子位置或分隔的位置。我认为重写是不必要的。

我宁愿用 Yii2 basic和modules 来做这件事。一个输入点和Yii2-app-basic urlMenager完成所有工作。 我不知道,如果这对您有所帮助,请看看Yii2 NGINX advanced config

在Yii2-app-advanced需要更改配置文件中的my-new-branch

    return [
    'homeUrl' => '/features/my-new-branch/',

    'components' => [

        'request' => [
            'baseUrl' => '/features/my-new-branch',
        ],
    ]
]