考虑到我有这样的事情:
/sites/foo/a1
/sites/foo/a2
/sites/foo/a3
/sites/bar/b1
/sites/bar/b2
我想像这样访问它们:
foo.a1.mydomain.com
或(如果最后一个不起作用)
foo-a1.mydomain.com
如何在 nginx 中动态创建虚拟主机以接受访问这些文件夹?
答案1
这可以通过以下 nginx 配置来实现:
server {
listen 80;
server_name mydomain.com *.mydomain.com;
set $path "default";
if ($host ~* ^([a-z0-9-]+)\.([a-z0-9-]+)\.mydomain.com$) {
set $path "$1/$2";
}
root /sites/$path;
}
Nginx$path
根据与变量匹配的正则表达式中的分组来设置变量$host
,该分组由 nginx 自动设置(参见嵌入变量)。通过最初设置$path
为“默认”,您可以在与正则表达式不匹配的/sties/default
情况下从目录中提供内容。$host
或者,您可以在server_name
指令中使用正则表达式匹配。请参阅Nginx 服务器名称了解更多信息。