在Ubuntu上使用Nginx 1.4.6,我试图配置Magento 2在子文件夹中运行。
我已经在/var/www
中有一些其他项目,设置如下:
server {
server_name website.com;
root /var/www/;
location /p1/ {
# config
}
location /p2/ {
# config
}
}
但是现在,我的Magento安装位于/mnt/storage/demo/demo-magento2
,我找不到一个方法将它包含在这个服务器块中。
我尝试使用Nginx (https://github.com/magento/magento2/wiki/Nginx-Configuration-Settings-and-Environment-Variables)的样例配置。因此,我将这个位置块添加到我的服务器块配置中:
location /demos/demo-magento2/ {
set $MAGE_ROOT /mnt/storage/demo-magento2/;
set $MAGE_MODE developers;
include /mnt/storage/demo-magento2/nginx.conf.sample;
}
Nginx一直返回这个错误:
2015/10/19 18:15:04 [emerg] 6250#0: location "/setup" is outside location "/demos/demo-magento2/" in /mnt/storage/demo-magento2/nginx.conf.sample:27
我对Nginx很陌生,所以有人能告诉我怎么弄清楚吗?
Nginx的配置是挑剔的指令的位置;因为Magento的nginx.conf.sample包含了'location'指令,所以它必须包含在' server '指令中。看一下示例配置顶部注释掉的部分;它大致显示了主配置文件应该是什么样子。
你应该有一个像这样的根配置文件:
upstream fastcgi_backend {
server unix:/var/run/php5-fpm.sock;
}
server {
listen 80;
server_name server.dev;
set $MAGE_ROOT /path/to/magento2;
set $MAGE_MODE developer;
include /path/to/magento2/nginx.conf.sample;
}
如果你使用的是典型的Ubuntu-nginx设置,你会希望这个文件在/etc/nginx/sites-available目录下,为了启用它,你需要从sites-enabled目录创建一个符号链接到那个文件。
正如@Memes指出的那样,我在位置块中犯了一个错误:
location /demos/demo-magento2/ {
set $MAGE_ROOT /mnt/storage/demo-magento2/;
set $MAGE_MODE developers;
include /mnt/storage/demo-magento2/nginx.conf.sample;
}
应:location /demos/demo-magento2/ {
set $MAGE_ROOT /mnt/storage/demo/demo-magento2/;
set $MAGE_MODE developers;
include /mnt/storage/demo/demo-magento2/nginx.conf.sample;
}
关键是我在路径中丢失了demo/子文件夹。nginx错误实际上是不言自明的!