基于文件夹结构的动态虚拟主机设置

基于文件夹结构的动态虚拟主机设置

考虑到我有这样的事情:

    /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 服务器名称了解更多信息。

相关内容