Nginx Controller自定义插件

Nginx Controller添加全局性CORS支持,需要自定义插件并且加载至nginx

内容目录

  • 编写CORS脚本
  • 创建ConfigMap对象
  • 修改nginx全局配置ConfigMap

编辑CORS LUA脚本

注意:

  • 在添加允许跨域域名时特殊字符使用%转义
  • lua文件命名必须是main.lua
local _M = {}
local originHeaderName = "OPTIONS"

local corsDomains = {
    ".*%.172%.20%..*",
    ".*%.192%.168%..*",
    ".*%.localhost.*"
}

local function setCorsHeader(originHeader)
    ngx.header["Access-Control-Allow-Origin"] = originHeader
    ngx.header["Access-Control-Allow-Credentials"] = "true"
    ngx.header["Access-Control-Allow-Headers"] =
        "ETag,Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,Content-Disposition,x-puat,x-test"
    ngx.header["Access-Control-Expose-Headers"] = "Content-Disposition,x-permission-msg"
    ngx.header["Access-Control-Allow-Methods"] = "GET,POST,OPTIONS,HEAD,PUT"
end

function _M.rewrite()
    if ngx.req.get_method() ~= originHeaderName then
        return
    end
    setCorsHeader(ngx.req.get_headers()["Origin"])
    return ngx.exit(ngx.HTTP_NO_CONTENT)
end

local function matchOrigin(originHeader)
    for _, domain in ipairs(corsDomains) do
        if string.match(originHeader, domain, 1) then
            return true
        end
    end
    return false
end

function _M.header_filter()
    if ngx.req.get_method() == originHeaderName then
        return
    end
    local httpOrigin = ngx.req.get_headers()["Origin"]
    if not httpOrigin then
        return
    end
    if matchOrigin(httpOrigin) then
        setCorsHeader(httpOrigin)
    end
end

return _M

使用插件

创建插件ConfigMap 对象

# kubectl create cm core-plugin-lua --from-file=main.lua

Nginx Controller挂载插件

volumeMounts:
- mountPath: /etc/nginx/lua/plugins/cors/
  name: cors-plugin-lua-cm
volumes:
- configMap:
      name: cors-plugin-lua-cm
   name: cors-plugin-lua-cm        

修改Nginx Controller全局配置ConfigMap

plugins名称与挂载插件目录名称一致

data:
  plugins: cors
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值