如何在 lua openresty nginx 中添加多个来源?

我在 nginx.conf 中有以下内容:

header_filter_by_lua_block {
    ngx.header["Access-Control-Allow-Origin"] = "http://example.com"
}

我想要将另一个 http://example.dev 添加到 Access-Control-Allow-Origin 中。我尝试将其更改为 http://example.com, http://example.dev,但它没有起作用。

我还尝试过这样做:

if ($http_origin ~* "^http?://(example.com|example.dev)$") {
    add_header Access-Control-Allow-Origin "$http_origin";
}

但这在 OPTIONS 请求中出了一些问题,所以我真的不能使用它。还有其他在 header_filter_by_lua_block 中实现的方法吗?请帮个忙。

点赞
用户10126088
用户10126088

听起来最推荐的方法是让您的服务器从客户端读取 Origin 标头,将其与您希望允许的域名列表进行比较,如果匹配,则将 Origin 标头的值作为响应中的 Access-Control-Allow-Origin 标头回传给客户端。

所以,下面的代码应该解决您的问题。

header_filter_by_lua_block {
  local origins = {
    ["http://example.com"] = true,
    ["http://example.dev"] = true
  }
  local origin = ngx.req.get_headers()["Origin"]  -- 获取请求 origin

  ngx.header["Access-Control-Allow-Origin"] = origins[origin] and origin or nil
}
2019-04-30 09:21:28