在 nginx 中为数万个目录提供服务,http_host 的子字符串

在 nginx 中为数万个目录提供服务,http_host 的子字符串

我们将托管 30k+ 个域的静态备份副本,并希望设置目录结构并通过单个server {}块动态提供该目录结构。我们希望避免因单个文件夹中的文件夹过多而导致的问题。

NGINX 中是否有子字符串函数或类似函数,我们可以使用它来基于主机名生成别名路径。

例子

location / {
   set $letter substr($http_host, 0, 1);
   alias /var/www/$letter/$http_host/;
}

这样 somedomain.com 就可以解析到该目录:

/var/www/s/somedomain.com/

也欢迎其他建议。

答案1

此案例记录在http://nginx.org/en/docs/http/server_names.html

你可以这样做:

server {
    server_name (?<domain>.+);

    root /var/www/$domain;
}

所以,这里我们使用正则表达式捕获将域名放入$domain变量中,然后将变量作为root

如果域名存在某种模式,您可以使用更精细的正则表达式。

相关内容