如何在lua openresty nginx中添加多个原点?

时间:2019-04-30 07:58:22

标签: nginx lua openresty

我在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内部还有其他方法吗?请帮忙。

1 个答案:

答案 0 :(得分:1)

  

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

source

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

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

  ngx.header["Access-Control-Allow-Origin"] = origins[origin] and origin or nil
}