Nginx变量映射问题:基于$allow_origin的$cred map指令始终返回false求助
问题分析与修复方案
你的map $http_origin $cred指令始终返回false的核心原因是逻辑错误:
- Nginx的
map指令是将源变量的实际值与定义的匹配键做对比,你用字符串'$allow_origin'作为匹配键,而$http_origin的值永远不会等于这个字符串,因此只会命中default返回false。 - 你的需求是基于第一个map生成的
$allow_origin判断是否设置$cred,所以第二个map的源变量应该是$allow_origin,而非$http_origin。
修复后的map指令 - cred
写法一(匹配非空值)
map $allow_origin $cred { "" false; default true; }
写法二(正则匹配非空内容)
map $allow_origin $cred { ~. true; default false; }
两种写法逻辑一致:当$allow_origin不为空(即第一个map已匹配到允许的源),$cred设为true;否则返回false,完全等效于你给出的if语句逻辑。
内容的提问来源于stack exchange,提问作者Inspiraller
相关产品推荐
相关产品推荐

