如何在nginx配置中提取URL第一个点之前的动态子域名字符
Nginx 提取首个子域名前缀配置方法
以下两种常用方案都可以实现从域名hello.test.example.com中提取到hello的需求:
方案1:server_name 正则直接捕获
适合域名后缀固定的场景,性能更高,匹配精度好:
server { # 正则捕获第一个点之前的字符存入$subdomain变量 server_name ~^(?<subdomain>[^.]+)\.test\.example\.com$; listen 80; location / { # 此处直接输出$subdomain即可得到hello return 200 $subdomain; } }
方案2:map 全局映射提取
适合泛域名场景、需要统一处理不同后缀域名的情况,map 块需配置在http层级:
http { # 从$host中提取首个点之前的内容存入$first_subdomain变量 map $host $first_subdomain { ~^(?<tmp>[^.]+)\..*$ $tmp; # 兜底规则:域名无点时直接返回原域名 default $host; } server { server_name *.test.example.com; listen 80; location / { # 此处直接输出$first_subdomain即可得到hello return 200 $first_subdomain; } } }
- 两种方案的捕获逻辑都是匹配「从域名开头到第一个点之间的所有非点字符」,完全符合动态子域名的提取需求
- 捕获得到的变量可以直接在日志、rewrite规则、反向代理参数等任意nginx配置场景中使用
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

