1. nginx扩展——ngx_lua 模块简介、安装
1. 簡介
? lua-nginx-module(ngx_lua module)把 Lua5.1 的解釋器 或 LuaJIT 2.0/2.1 的解釋器嵌入到 nginx 中,將強大的 Lua 線程(Lua threads)與 nginx 事務模型(Nginx event model)相結合,我們可以更輕易的改變 子請求(subrequests)的處理過程。
? 與 Apache's mod_lua 和 Lighttpd's mod_magnet 不同,通過此模塊執行的 Lua 代碼是非阻塞的,同時此模塊提供的 Nginx API for Lua 可以處理上游服務,比如 MySQL, PostgreSQL, Memcached, Redis, upstream HTTP web services。
? ngx_lua 可以與下面的 Lua 庫、nginx 模塊結合:
- lua-resty-memcached
- lua-resty-mysql
- lua-resty-redis
- lua-resty-dns
- lua-resty-upload
- lua-resty-websocket
- lua-resty-lock
- lua-resty-logger-socket
- lua-resty-lrucache
- lua-resty-string
- ngx_memc
- ngx_postgres
- ngx_redis2
- ngx_redis
- ngx_proxy
- ngx_fastcgi
? 通過 ngx.location.capture 或 ngx.location.capture_multi 的方式, ngx_lua 可以使用幾乎所有的 nginx 模塊。推薦使用 lua-resty-*庫的方式訪問 nginx 的上游模塊,而不是創建子請求的方式,使用前者會更靈活、更有效的使用內存。
在 nginx 的一個 worker 里,所有請求共享一個Lua 解釋器或 LuaJIT 實例,即一個 nginx worker,一個 Lua 解釋器或 LuaJIT 實例。每個請求的上下文(context)是通過輕量級的 Lua 協程(coroutines)相互隔離的。
加載的 Lua 模塊駐留在 nginx worker 進程級別,這樣在負載很高的情況下,Lua 本身只是用了很低的內存。
由于此模塊是 nginx “http” 系統的插件,所以只能以 HTTP 協議族的方式(HTTP 0.9/1.0/1.1/2.0,WebSocket)與下游通信。如果想使用 TCP 通信,可以使用與 Lua API 兼容的 ngx_stream_lua
2. 使用場景
- 使用 Lua 處理或混合 nginx 上游的各種輸出;
- 在請求到達 nginx 上游之前,使用 Lua 進行復雜的訪問控制,安全檢查;
- 使用 Lua 操作請求的響應頭;
- ?從外部存儲(redis、memcached、mysql...)獲取信息來動態決定訪問哪一個上游;
- ?以非阻塞的方式從存儲中獲取信息生成復雜的Web 應用內容
- ?使用Lua 在 重定向階段(rewrite phase)進行復雜的 URL 路由
- ?使用 Lua 實現 nginx 子請求或 location 模塊的高級緩存機制;
- ?...
ngx_lua 即提供了腳本的靈活性,又有與 C 語言可比肩的性能(CPU ,內存)——需要啟用 LuaJIT2.x。
3. 與 nginx 的兼容性
ngx_lua 模塊的最新版本兼容以下的 nginx:
- 1.11.x (last tested: 1.11.2)
- 1.10.x
- 1.9.x (last tested: 1.9.15)
- 1.8.x
- 1.7.x (last tested: 1.7.10)
- 1.6.x
4. 安裝
? 推薦使用 OpenResty releases 的發行版(整合了 nginx,ngx_lua ,LuaJIT 2.1 還有其他強大的 nginx 模塊 和 Lua 庫)
4.1 Ubuntu 安裝 Openresty 的發行版
在 Ubuntu系統中添加 Openresty 的 APT 倉庫,以便于安裝或更新
# 導入 Openresty 的 GPG 密鑰: wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -# 安裝 add-apt-repository 命令 # (之后可以刪除這個包以及對應的關聯包) sudo apt-get -y install software-properties-common# 添加官方 official APT 倉庫: sudo add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main"# 更新 APT 索引: sudo apt-get update# 安裝 sudo apt-get install openresty#這個包同時也推薦安裝 openresty-opm 和 openresty-restydoc 包,所以后面兩個包會缺省安裝上。 如果不想自動關聯安裝,可以用下面方法關閉自動關聯安裝: #sudo apt-get install --no-install-recommends openresty4.2 Debian Jessie 及以上
與 Ubuntu相似,注意不同點 :
# 導入 GPG 密鑰:wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -# 安裝 add-apt-repository 命令# (之后你可以刪除這個包以及對應的關聯包)sudo apt-get -y install software-properties-common# 添加我們官方 official APT 倉庫: (與 Ubuntu 不同)sudo add-apt-repository -y "deb http://openresty.org/package/debian $(lsb_release -sc) openresty"# 更新 APT 索引:sudo apt-get update# 然后就可以像下面這樣安裝軟件包,比如 openresty:sudo apt-get install openresty# 這個包同時也推薦安裝 openresty-opm 和 openresty-restydoc 包,所以后面兩個包會缺省安裝上。 如果你不想自動關聯安裝,可以用下面方法關閉自動關聯安裝:sudo apt-get install --no-install-recommends openresty4.3 Debian Wheezy
# 導入 GPG 密鑰:wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -# 安裝 add-apt-repository 命令:(與其他版本不同)# (之后你可以刪除這個包以及對應的關聯包)sudo apt-get -y install python-software-properties# 打開 wheezy-backports 倉庫:sudo add-apt-repository -y "deb http://ftp.debian.org/debian wheezy-backports main"# 添加官方 APT 倉庫sudo add-apt-repository -y "deb http://openresty.org/package/debian $(lsb_release -sc) openresty"# 更新 APT 索引:sudo apt-get update# 然后就可以像下面這樣安裝包了,比如裝 openresty:sudo apt-get install openresty# 這個包同時也推薦安裝 openresty-opm 和 openresty-restydoc 包,所以后面兩個包會缺省安裝上。 如果你不想自動關聯安裝,可以用下面方法關閉自動關聯安裝:sudo apt-get install --no-install-recommends openresty4.4 Centos
# 下面的命令就可以添加倉庫:sudo yum install yum-utilssudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo# 然后就可以像下面這樣安裝軟件包,比如 openresty:sudo yum install openresty# 如果你想安裝命令行工具 resty,那么可以像下面這樣安裝 openresty-resty 包:sudo yum install openresty-resty# 命令行工具 opm 在 openresty-opm 包里,而 restydoc 工具在 openresty-doc 包里頭。# 列出所有 openresty 倉庫里頭的軟件包:sudo yum --disablerepo="*" --enablerepo="openresty" list available4.5 其他版本操作系統
參考官方文檔
轉載于:https://www.cnblogs.com/kutim/p/7526211.html
總結
以上是生活随笔為你收集整理的1. nginx扩展——ngx_lua 模块简介、安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj 3685
- 下一篇: 使用淘宝镜像cnpm安装Vue.js