記錄 openresty+nginx 網關(跨域配置不生效問題)

記錄 openresty+nginx 網關(跨域配置不生效問題)

  • 跨域本身對于nginx來說都是小問題,只需要添加一些配置,例如:
location / {  
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

    if ($request_method = 'OPTIONS') {
        return 204;
    }
} 

就能解決了。

  • 一般自己寫網關都是會進行一些自定義操作比如鑒權等操作。例如:
rewrite_by_lua_block {
    local cjson = require "cjson"
    local dis = require "auth.dispatcher"

    -- 檢測路由
    ngx.var.service, needCheckToken = dis.GetServiceURL(ngx.var.request_uri)

    ngx.log(ngx.WARN, 'location ngx.var.service:', ngx.var.service)

    if not needCheckToken then
    return
    end

    -- 校驗token
    local info = dis.verify_token()
    if not info.verify then
    ngx.say(cjson.encode(info))
    return ngx.exit(401)  -- 問題就出現(xiàn)在這里,直接返回了。
    -- return ngx.HTTP_UNAUTHORRIZED
    end

    -- 設置該請求的UID
    ngx.req.set_uri_args({uid=info.userid})
}

ngx.exit()方法會直接打回請求,什么都不做,我們在nginx配置文件寫的其他配置也不會生效。這就導致了我們明明做了跨域配置卻不生效
類似與GOLANG里面的os.exitdefer也不執(zhí)行了。直接退出
這里使用 ngx.HTTP_UNAUTHORRIZED代替ngx.exit(401)就可以了。
借鑒

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容