在nginx中映射子域无效

时间:2016-04-24 05:39:43

标签: nginx

我正在设置一些PHP子域名,而且我很难让nginx做我想做的事情。我试图将每个子域发送到应用程序的不同部分。这是我的文件,名为id.conf的样子(它位于sites-enabled目录中):

map $http_host $app {
    'api.id.dev'        'api/public';
    'www.id.dev'        'www/public';
}

server {
    set $base /Users/dev/www/id/apps;
    server_name  ~^(?<subdomain>.+)\.id\.dev$;
    index index.html index.htm index.php;
    root $base/$app;
    charset utf-8;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    access_log off;
    client_max_body_size 100m;
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param APP_ENV local;
    }
}

server {
    server_name id.dev;
    rewrite ^ http://www.id.dev$request_uri permanent;
}

我在/etc/hosts中有这些子域的正确映射,我在nginx错误日志中看到了这个错误:

2016/04/24 00:26:32 [error] 5691#0: *5 directory index of "/Users/dev/www/id/apps//" is forbidden, client: 127.0.0.1, server: ~^(?<subdomain>.+)\.id\.dev$, request: "GET / HTTP/1.1", host: "api.id.dev"

这表明主机在那里,而且它正在读取conf文件,但它似乎并没有将http主机与正确的目录相匹配。 (此外,这些子域的目录具有index.php文件)

这是什么问题?我有另一个配置文件正在做同样的事情,它正在工作。事实上,我可以加载一个单独的标签并加载其他网站,但它似乎并没有为这个项目工作(我已经很多次验证了文件路径)

2 个答案:

答案 0 :(得分:0)

我认为你的匹配工作不正常,试试这个:

@Override
@Cacheable(value = "departments", key = "#id")
public Department findOne(Long id) {
return departmentRepository.findOne(id);
}

答案 1 :(得分:0)

我解决了这个问题。事实证明,变量$app与使用map指令的相同变量名的另一个文件冲突。我在$name中将变量重命名为id.conf,首先在地图中重命名:

map $http_host $name {
    'api.id.dev'        'api/public';
    'www.id.dev'        'www/public';
}

然后我将root $base/$app;更改为root $base/$name;,在终端中使用sudo nginx -s reload重新加载了nginx,现在效果非常好。