Nginx配置多级子域名映射至不同根目录的技术问询
实现多级子域名对应嵌套目录的Nginx配置
当然可以实现你的需求!不过这里有个关键细节需要注意:你的初始思路是直接将子域名中的.替换为/subdomains/,但按照你给出的目录规则,子域名的层级顺序需要反转(比如test.abc.domain.com对应abc/subdomains/test,而非test/subdomains/abc),所以我们需要先反转子域名的层级顺序,再做替换。
下面提供两种可行方案,你可以根据自己的环境选择:
方案1:原生Nginx指令(无需第三方模块)
如果你的Nginx没有安装额外模块,可以通过多次rewrite指令来处理子域名的反转和替换。这种方案适合子域名层级较少(比如最多3-4级)的场景:
server { listen 80; listen [::]:80; # 捕获完整的多级子域名部分(比如hello.test.abc) server_name "~^(?<sub>.+)\.domain\.com$"; # 第一步:反转子域名的层级顺序 set $reversed_sub $sub; # 处理3级子域名:a.b.c → c.b.a rewrite ^([^.]+)\.([^.]+)\.([^.]+)$ $3.$2.$1 break; # 处理2级子域名:a.b → b.a rewrite ^([^.]+)\.([^.]+)$ $2.$1 break; # 1级子域名无需处理,保持原内容 # 第二步:将反转后的子域名中的`.`替换为`/subdomains/` set $subRoot "/subdomains/$reversed_sub"; rewrite ^(/subdomains/[^.]+)\.([^.]+)$ $1/subdomains/$2 break; rewrite ^(/subdomains/[^.]+)\.([^.]+)\.([^.]+)$ $1/subdomains/$2/subdomains/$3 break; # 最终设置根目录 set $root /var/www/domain.com$subRoot/www/; root $root; # 其他配置(比如location、日志等) ... }
效果验证
abc.domain.com→/var/www/domain.com/subdomains/abc/www/test.abc.domain.com→/var/www/domain.com/subdomains/abc/subdomains/test/www/hello.test.abc.domain.com→/var/www/domain.com/subdomains/abc/subdomains/test/subdomains/hello/www/
方案2:使用Lua模块(更灵活,支持任意层级)
如果你的Nginx安装了ngx_http_lua_module(比如通过OpenResty),可以用Lua代码更简洁地处理任意层级的子域名,无需担心层级限制:
server { listen 80; listen [::]:80; server_name "~^(?<sub>.+)\.domain\.com$"; # 用Lua代码处理子域名反转和路径拼接 set_by_lua_block $subRoot { local sub = ngx.var.sub -- 将子域名按`.`分割成数组 local parts = {} for part in string.gmatch(sub, "[^.]+") do table.insert(parts, part) end -- 反转数组顺序 local reversed_parts = {} for i = #parts, 1, -1 do table.insert(reversed_parts, parts[i]) end -- 拼接成目标路径格式 return "/subdomains/" .. table.concat(reversed_parts, "/subdomains/") } # 设置根目录 root /var/www/domain.com$subRoot/www/; # 其他配置 ... }
这种方案的优势是不管子域名有多少层级,都能自动处理,非常灵活。
注意事项
- 确保你的Nginx配置中开启了正则表达式支持(
server_name使用~开头的正则)。 - 如果使用Lua方案,需要确保Nginx已编译
ngx_http_lua_module或直接使用OpenResty。 - 测试配置前可以用
nginx -t检查语法是否正确,避免配置错误导致服务重启失败。
内容的提问来源于stack exchange,提问作者pet21221
相关产品推荐
相关产品推荐

