一、場景概述
近期業務應用過程當中,需要對不同的型別進行分流**,實現的總體方向是將原有的免費的內容進行付費改造。經過業務討論,實現方案有兩種。
在以上兩種方案實施過程當中面臨乙個問題需要解決,付費內容實現後,部分原有的免費資源如何跳轉到付費的平台。同乙個資源不能既免費又付費,這存在問題。
二、解決思路
1、第一階段思考:將免費的內容從原有的平台人工去除或者隱藏,但涉及多個平台多個部門一時間無法解決。
3、第三階段思考:通過閘道器層對內容進行判斷,先呼叫api判斷是否為付費,如付費將流量分發至付費平台,其它的正常免費瀏覽。
4、第四階段思考:實現閘道器層的思路有在程式層面進行處理,但由於原資源為靜態頁面,不能通過動態程式實現。此時想到了從http協議層來進行處理,根據http協議首先對請求的頭部判斷,然後做後續的邏輯處理。
5、第五階段思考:最終從http中介軟體層想到了解決方案,開源的nginx和apache等,可以進行二次開發來解決。從應用的實際情況,選擇了通過nginx二次開發的方案來解決。
6、第六階段思考:nginx二次開發可以直接通過開發nginx子模組的形式,但要對c,c++程式設計有比較高的要求。通過對官方文件的閱讀,發現了lua的整合版本openresty。通過乙個簡單的二次開發即可解決此分流方式。
三、解決過程
1、搭建環境,直接上官方**openresty編譯環境安裝和配置即可。(此部分比較簡單)
2、對nginx的請求執行流程要比較清楚,可以參考大量的nginx的二次開發的書籍。
3、直接上**:
end以上**只進行了核心功能的實現,基本上已經可以滿足生產環境的使用了。但**還有比較大的優化空間,如對安全性、異常等的處理。
四、總結
1、nginx+lua的解決方案在現在的網際網路上應用非常廣泛,只需要非常精簡的lua**即可解決問題。在實現過程中要特別注意nginx的請求處理流程,需要認真的研究其源**。
2、實現的思路還有很多,如node.js等,最終的原理都是從閘道器層進行處理。
基於Nginx Lua實現的Token鑑權認證
管理員要發布乙個公告,在前台傳送post請求,攜帶需要發布的json資料,呼叫後台api服務,通過需要發布的資料,利用freemaker模板,生成乙個靜態頁,儲存到伺服器指定目錄。所以,乙個靜態頁面,無論非登入使用者還是已登入但是沒有授予檢視該稿件許可權的使用者,頁面能夠做的是利用js判斷他們的使用...
nginx lua開發例子
參考文章 conf檔案與原來文章的配置有點不同,這個要參考官方文件 vim usr chapter6 nginx chapter6.conf upstream backend server location ad d lua檔案 local redis require resty.redis loc...
nginx lua環境搭建
lua 是乙個小巧的指令碼語言。該語言的設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。lua指令碼可以很容易的被c c 呼叫,也可以反過來呼叫c c 的函式,這使得lua在應用程式中可以被廣泛應用。不僅僅作為擴充套件指令碼,也可以作為普通的配置檔案,代替xml,ini等檔...