我正在设置一些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
文件)
这是什么问题?我有另一个配置文件正在做同样的事情,它正在工作。事实上,我可以加载一个单独的标签并加载其他网站,但它似乎并没有为这个项目工作(我已经很多次验证了文件路径)
答案 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,现在效果非常好。