为什么我在 map 中定义的变量会得到无效参数?

为什么我在 map 中定义的变量会得到无效参数?

我正在尝试为服务器上的某些域名定义白名单。我已经找到了一种使用上下文来实现这一点的方法map,但现在我得到了一个invalid parameter "$whitelist"在映射上下文中定义的变量。我之前已经尝试过这种方法,而且成功了,但现在我突然收到错误。不过我不确定为什么会这样。

map $http_host $whitelist {
  default 0;
  "~^(?<subdomain>\w+)\.(?<domain>domain-name\.example\.com)$" $domain;

  # whitelist domains
  whitelist1 example.com;
  whitelist2 subdomain.example.com;
}

server {
  listen 80;
  resolver 127.0.0.11 ipv6=off;
  proxy_intercept_errors on;


  # error_page 400 403 = @fallback;
  if ($whitelist = 0) {
    return 403;
  }

  location /v1/ {

    allow $whitelist;
    deny all;
  }

  location @fallback {
    return 400;
}

答案1

allow指令仅接受 IP 地址、CIDR 范围unix:all作为参数,如指令性文件

在您的配置中,条目是域名,不受支持。

相关内容