Nginx如何使用map指令提取$http_host请求头中的主域名部分
Nginx map指令提取host主域名的正确配置
原有map配置失效的核心原因是正则捕获组规则错误:~^www1\.(?<this_dom>)$中的命名捕获组内部没有匹配规则,仅能匹配www1.后无内容的极端场景,无法捕获到后面的主域名段,因此得到空值。
map块需要放在Nginx配置的http层级下(注意map块不能放入server块内,否则会报语法错误),正确写法如下:
map $http_host $this_dom { default $http_host; # 写法1:使用数字捕获组,更简洁 ~*^www1\.(.*)$ $1; # 写法2:使用命名捕获组,可读性更好,二者选其一即可 # ~*^www1\.(?<captured_dom>.*)$ $captured_dom; }
该配置和你当前在用的if实现逻辑完全一致,匹配时忽略大小写,只要host以www1.开头,就会将后面的所有内容赋值给$this_dom变量,非匹配场景保留原始host值。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

