Nginx 的 token 認證是基於集成了 nginx+lua 的 openresty 來實現的.nginx
- 環境: centos 7
- 部署方式: 增量部署(不影響原 nginx 版本)
- 版本: openresty/1.13.6.2
- 啓動命令:1.原版本經過nginx命令啓動. 2.新版本經過openresty命令啓動.
需求:
對指定域名增長 http 請求頭(header)驗證,git
請求頭爲 xxxx=xxxxx 形式.centos
若是驗證不經過,返回 403 ‘請求頭驗證失敗 或 Error request forbidden ’app
實際代碼示列:
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 最佳實踐google
nginx 狀態碼spa