配置Nginx子域名泛解析绑定至单独目录 nginx映射多个二级域名


简单记录:
需求描述
Web 服务器为 Nginx , 希望配置泛子域名解析 。其实稍加修改,配置泛域名解析也不是难事 。
解决及分析
在 Nginx 的配置文件中做如下配置(示意):
server {
server_name
【配置Nginx子域名泛解析绑定至单独目录 nginx映射多个二级域名】domain.com
www.domain.com
*.domain.com

;
set $subdomain '';
if ($host ~* (/b(?!www/b). )/.domain.com) {
set $subdomain -$1;
}
root /home/user/www$subdomain/;
}
解释:
首先,在定义 server_name 时使用通配符 * , 使 Nginx 接受任意子域名的访问 。
然后,对 $host 进行分析 , 找到子域名的名称 。这个正则表达式是在网上抄的,目的是为了在匹配子域名的同时,不匹配 www 开头的访问和不带 www 的访问 。前面的 set 是因为 Nginx 的 If 没有 Else,所以默认先将 $subdomain 置空 。
最后,在定义 root 的时候,使用 $subdomain 变量 。

经验总结扩展阅读