nginx站点在子文件夹中



我在按照我想要的方式设置nginx时遇到了一些问题。我有一个网站example·localhost,它位于/warrant/frontend/www。我的配置是这样的:

server {
    listen 80;
    server_name example.localhost;
    root /vagrant/frontend/www;
    index index.php;
    location / {
        try_files   $uri $uri/ /index.php$is_args$args;
    }
    location ~ .*.php$ {
        include /etc/nginx/fastcgi.conf;
        try_files $uri = 404;
        fastcgi_pass 127.0.0.1:9000;
    }
}

但是,我想添加一个管理站点,位于/farranget/backend/www,地址为example.localhost/admin。这是当事情出错时,我得到了一个404,下面的设置没有找到,基于这篇文章:

location /admin {
    root /vagrant/backend/www;
}  
location ~ /admin/.+.php$ {
    include /etc/nginx/fastcgi.conf;
    try_files $uri = 404;
    fastcgi_pass 127.0.0.1:9000;
}

错误日志如下所示:

2014/04/23 12:30:10 [error] 15459#0: *1 "/vagrant/backend/www/admin/index.php" is not found (2: No such file or directory), client: 192.168.56.1, server: example.localhost, request: "GET /admin/ HTTP/1.1", host: "example.localhost"

我明白为什么我会得到404,但我该怎么做呢?非常感谢您的帮助!

更新

我已将我的管理位置更改为:

location /admin {
    alias /vagrant/backend/www/;
    try_files   $uri $uri/ /index.php?$args;
    location ~ .php$ {
        include /etc/nginx/fastcgi.conf;
        fastcgi_pass 127.0.0.1:9000;
    }
}

我还删除了这个块:

location ~ /admin/.+.php$ {...}

现在,对example.localhost/admin的调用得到了正确的处理,但如果我将其更改为example.localhost/admin/site/index,则请求将由前端处理。/admin位置似乎不匹配。。。有什么想法吗?

location块是完全独立的。您的请求最终出现在最后一个location块中,并且永远看不到第一个块中的root指令。将root指令放入第二个块。

location ~ /admin/.+.php$ {
    root /vagrant/backend/www;
    include /etc/nginx/fastcgi.conf;
    try_files $uri = 404;
    fastcgi_pass 127.0.0.1:9000;
}
server {
    listen 80;
    server_name example.localhost;
    root /vagrant/frontend/www;
    index index.php;
    location / {
            try_files $uri $uri/ /index.php?$args;
            location ~ .php$ {
                    include fastcgi.conf;
            }
    }
    location /admin {
            return 301 /admin/;
    }
    location /admin/ {
            alias /vagrant/backend/www/;
            try_files $uri $uri/ @handler;
            location ~ .php$ {
                    include fastcgi.conf;
            }
    }
    location @handler {
            rewrite / /admin/index.php?$args;
    }
}

最新更新