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