OpenResty概念詳細介紹,快速掌握Helloword

OpenResty概念講解

OpenResty介紹

OpenResty® 是一個基於 Nginx 與 Lua 的高性能 Web 平臺,其內部集成了大量精良的 Lua 庫、第三方模塊以及大多數的依賴項。用於方便地搭建能夠處理超高併發、擴展性極高的動態 Web 應用、Web 服務和動態網關

OpenResty® 通過匯聚各種設計精良的 Nginx 模塊(主要由 OpenResty 團隊自主開發),從而將 Nginx 有效地變成一個強大的通用 Web 應用平臺。這樣,Web 開發人員和系統工程師可以使用 Lua 腳本語言調動 Nginx 支持的各種 C 以及 Lua 模塊,快速構造出足以勝任 10K 乃至 1000K 以上單機併發連接的高性能 Web 應用系統。

OpenResty® 的目標是讓你的Web服務直接跑在 Nginx 服務內部,充分利用 Nginx 的非阻塞 I/O 模型,不僅僅對 HTTP 客戶端請求,甚至於對遠程後端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進行一致的高性能響應。

哪些公司正在用OpenResty

  • OpenResty 應用的場景非常多,比如應用在 CDN 場景,典型的用戶包括又拍雲、CloudFlare;
  • 京東主站的 API 網關,以及京東物流的第三方商家的網關層;
  • 12306 應用 Openesty 主要是替代 Nginx 做負載均衡和反向代理,以及火車票在出現的時候反向最大的餘票的查詢等都是使用 OpenResty 來實現;
  • 360 企業安全後端所有和安全相關的邏輯都是 OpenResty 實現的;
  • 騰訊遊戲的廣告系統裏面所有的業務邏輯也是使用 OpenResty 來開發的;
  • KONG 開源出來的一整套解決方案(雲原生 API gateway & Service Mash)也是基於 OpenResty 去做的。

OpenResty應用場景

其實官網 wiki 已經列了出來:

  • 在lua中混合處理不同nginx模塊輸出(proxy, drizzle, postgres, redis, memcached等)。
  • 在請求真正到達上游服務之前,lua中處理複雜的准入控制和安全檢查。
  • 比較隨意的控制應答頭(通過Lua)。
  • 從外部存儲中獲取後端信息,並用這些信息來實時選擇哪一個後端來完成業務訪問。
  • 在內容handler中隨意編寫複雜的web應用,同步編寫異步訪問後端數據庫和其他存儲。
  • 在rewrite階段,通過Lua完成非常複雜的處理。
  • 在Nginx子查詢、location調用中,通過Lua實現高級緩存機制。
  • 對外暴露強勁的Lua語言,允許使用各種Nginx模塊,自由拼合沒有任何限制。該模塊的腳本有充分的靈活性,同時提供的性能水平與本地C語言程序無論是在CPU時間方面以及內存佔用差距非常小。所有這些都要求LuaJIT 2.x是啓用的。其他腳本語言實現通常很難滿足這一性能水平。

 

功能需求

僅僅是部分功能(更加詳盡的不再一一列出)

  • 第一個方面:在開發階段還是有大量重複性的、非功能性的模塊的開發,比如:身份驗證、登陸校驗、流量控制、頻次控制、安全等等這樣的事情要做。

  • 第二個方面:就是線上運行的時候也存在大量的防刷,異常用戶行爲,需要進行行爲控制和分析,包括防刷、秒殺、抽獎類活動的一些流量控制等干預。

API網關彙總

以下圖來源於網絡,能有所參考

 

 

環境變量

腳本 啓動

創建lua目錄

連接數據庫

sql注入

https://moonbingbing.gitbooks.io/openresty-best-practices/content/openresty/safe_sql.html

亂碼問題:charset utf-8;   #設置編碼

http {
    server {
        #監聽端口,若你的6699端口已經被佔用,則需要修改
    listen 6100;
    location /initProxy {
    default_type text/html;
    charset utf-8;   #設置編碼
    content_by_lua_file /opt/openresty-router/lua/lua_mysql_proxy_list.lua;
 }}

如何創建配置文件選項呢

 

https://blog.csdn.net/daiyudong2020/article/details/53027934

由於函數定義等價於變量賦值,我們也可以把函數名替換爲某個 Lua 表的某個字段,例如

function foo.bar(a, b, c)
    -- body ...
end
local color={first="red", "blue", third="green", "yellow"}
print(color["first"])                 --> output: red
print(color[1])                       --> output: blue
print(color["third"])                 --> output: green
print(color[2])                       --> output: yellow
print(color[3])                       --> output: nil

 

https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/function_before_use.html

 

點號與冒號操作符的區別

 

不要忘記了末尾的分號:

 

 

    ngx.say("HelloWorld")

 

發佈了232 篇原創文章 · 獲贊 151 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章