基於nginx的token認證


Nginx 的 token 認證是基於集成了 nginx+lua 的 openresty 來實現的.

  • 環境: centos 7
  • 部署方式: 增量部署(不影響原 nginx 版本)
  • 版本: openresty/1.13.6.2
  • 啟動命令:1.原版本通過nginx命令啟動.
    2.新版本通過openresty命令啟動.

需求:

對指定域名增加 http 請求頭(header)驗證,

請求頭為 xxxx=xxxxx 形式.

如果驗證不通過,返回 403 ‘請求頭驗證失敗 或 Error request forbidden ’

實際代碼示列:

  server {
        listen       80;
        server_name  www.aaa.com;
        access_log  logs/host.access.log  main;
        location /a/b/c {
                access_by_lua '
                local args = ngx.req.get_headers(); --獲取請求中 header 頭的列表.
                local token1 = args["appid"];   --取出 header 頭中key為 appid 的值.
                local token2 = "123456";  --定義一個局部變量.
                local errs = "oh,Only Authorized Request will be Processe"  --定義錯誤提示消息
                if not token1 then
                        ngx.status = ngx.HTTP_FORBIDDEN --返回錯誤碼
                        ngx.say(errs)  --返回錯誤消息
                        ngx.exit(200) -- 跟以上兩個連用,固定寫法
                end
 
                if token1 ~= token2 then
                        ngx.status = ngx.HTTP_FORBIDDEN
                        ngx.say(errs)
                        ngx.exit(200)
                else
                        return
                end
                ';
                proxy_pass http://www.google.com;
        }
}

實施過程中的坑:

背景介紹:
1.我是拷貝的原 nginx 下的配置文件,原 nginx 版本為 1.12.2.
2.測試環境為 openresty 中的nginx,版本為 1.13.6.2
我以為配置文件是通用的,雖然原版本 nginx 的配置文件在新版本中不兼容的部分,我都替換了,但還是產生了奇怪的問題...

  • 測試環境通過,生產環境無論怎么修改配置都無法通過,中間浪費了很多時間,最后基於新 nginx 配置文件重寫了整個配置,解決了問題.

致謝:

openresty 最佳實踐

Nginx 使用 Lua 模塊校驗 Token

用lua擴展你的Nginx(寫的非常好)

nginx 狀態碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM