我正在尝试为服务于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:
frontend/web
子文件夹提供。frontend/web/index.php?$args
,并使用〜.php $ location与fastcgi一起投放。BACKEND:
backend/web
子文件夹中提供。backend/web/index.php?$args
,并使用〜.php $ location与fastcgi一起投放。我遇到了目录及其索引(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