Yii2高级应用程序和nginx配置(索引指令配置)

时间:2016-09-16 11:20:41

标签: nginx url-rewriting yii2 yii2-advanced-app

我正在尝试为服务于Yii2高级模板的nginx构建正确的服务器配置,其中后端托管在与前端相同的域名内的子文件夹中。

在这种情况下,path_to_yii2包含整个Yii2应用程序模板,我们有以下要求:

path_to_yii2/frontend/web - >应该是webroot / location

path_to_yii2/backend/web - >应该是/ backend位置的webroot

应正确提供两个文件夹中的静态内容。 PHP文件应该适用于这两种情况。

我编写并测试了这样的配置:

server {
   listen        80;
   server_name  localhost;

   root <path_to_yii2_application>;

    location ~* ^/backend/(.+)$ {
        try_files  /backend/web/$1 /backend/web/$1/ /backend/index.php?$args;
        index /backend/$1/index.php; # not working in case of exact /backend/ request

        location ~* ^/backend/(.+\.php)$ {
            #fastcgi_pass   127.0.0.1:9000;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include        fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME $document_root/backend/web/$1;
        }

    }

    location / {
        try_files  /frontend/web/$uri /index.php?$args;
        index /$uri/index.php; # not working at all, but / location is served by php even without this line
    }

    location ~ \.php$ {
        #fastcgi_pass   127.0.0.1:9000;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root/frontend/web/$fastcgi_script_name;
    }
}

我对这种配置有一些未解决的问题。我测试了六种不同的选择:

FRONTEND:

  1. / location下的静态内容应直接从yii2应用程序文件夹的frontend/web子文件夹提供。
  2. 此处不存在的内容应重定向至frontend/web/index.php?$args,并使用〜.php $ location与fastcgi一起投放。
  3. / location下的目录应返回索引,如果需要,请提供〜.php $ location和fastcgi。
  4. BACKEND:

    1. / backend位置下的静态内容应直接从yii2应用程序文件夹的backend/web子文件夹中提供。
    2. 此处不存在的内容应重定向至backend/web/index.php?$args,并使用〜.php $ location与fastcgi一起投放。
    3. / backend位置下的目录应返回索引,如果需要,请提供〜.php $ location和fastcgi。
    4. 我遇到了目录及其索引(3和6)的麻烦。

      首先,前端部分的目录根本不起作用,似乎index /$uri/index.php;由于某种原因是错误的。

      其次,后端目录的工作除了精确的/backend/网址。 Nginx不在= / backend / case中提供索引指令。

      作为后端的临时解决方法,我为这个确切的网址添加了几行:

      location = /backend {
          return 301 https://$server_name/backend/index.php;
      }
      
      location = /backend/ {
          return 301 https://$server_name/backend/index.php;
      }
      

      如何正确修复这些索引以及我做错了什么?

      P.S。还有一些类似的问题,例如Migrating Yii2 from Apache to Nginx - failed on backend app(未提供正确答案,建议使用子域名)和Nginnx config for Yii 2 Advanced App Template(建议将yii2应用程序中的后端内容移至前端文件夹)。我相信nginx配置是一种配置yii2-application模板的正确方法。 还有https://github.com/mickgeek/yii2-advanced-one-domain-config repositary,它不适用于nginx&gt; 1.8.1。

      有趣的是,apache只需要一个符号链接来完成这项工作。 Nginx也在1.8.1之前。

      Yii2应用程序模板可以从这里克隆:https://github.com/yiisoft/yii2-app-advanced.git

0 个答案:

没有答案