Nginx 使用Lua指令碼

2022-09-10 23:57:40 字數 4310 閱讀 6598

etc/profile 加入並使之生效

# lua

exportluajit_lib=/usr/local/luajit/lib

exportluajit_inc=/usr/local/luajit/include/luajit-2.0

執行#source etc/profile

ndk (nginx development kit) 模組是乙個拓展 nginx 伺服器核心功能的模組,第三方模組開發可以基於它來快速實現。 ndk 提供函式和巨集處理一些基本任務, 減輕第三方模組開發的**量

lua-nginx-module 模組使 nginx 中能直接執行 lua

檢視原始編譯

/opt/nginx/sbin/nginx -v

如:

進入 nginx 原始目錄:

只 make,不執行 make install。

編譯報錯應該就是 lua 環境變數不對。

nginx -v 命令報錯

./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: no such file or directory

解決:

echo "/usr/local/luajit/lib" >> /etc/ld.so.conf

ldconfig

成功之後可以 nginx -v 檢視,無報錯即可。

把原來的 nginx 備份為 nginx_old

cp objs/nginx 到原來的 nginx 並覆蓋。

在編譯目錄執行 (在nginx是啟動狀態)

makeupgrade

nginx 新增 lua 模組

測試:server

...

}

瀏覽器開啟:

可以看到 hello, lua!

方法型別

說明ngx.var

請求如果要賦值如 ngx.var.b = 2,此變數必須提前宣告;另外對於 nginx location 中使用 正則捕獲的捕獲組可以使用 ngx.var [捕獲組數字]獲取;

ngx.req.get_headers

請求獲取請求頭,預設只獲取前100,如果想要獲取所以可以呼叫ngx.req.get_header s(0);獲取帶中劃線的請求頭時請使用如 headers.user_agent 這種方式;如果乙個請求頭有多個值,則返回的 是 table;

ngx.req.get_uri_args

請求獲取 url 請求引數,其用法和 get_headers 類似;

ngx.req.get_post_args

請求獲取 post 請求內容體,其用法和 get_headers 類似,但是必須提前呼叫 ngx.req.r ead_body() 來讀取 body 體(也可以選擇在 nginx 配置檔案使用lua_need_request_body on;開啟讀取 bod y 體,但是官方不推薦);

ngx.req.raw_header

請求未解析的請求頭字串;

ngx.req.get_body_data

請求為解析的請求 body 體內容字串。

ngx.req.get_method

請求獲取請求的大寫字母形式的請求方式

ngx.header

響應通過ngx.header.header_name的形式獲取或設定響應頭資訊。

ngx.exit

響應以某個狀態碼返回響應內容

ngx.redirect

響應重定向當前請求到新的 url

ngx.log

其他輸出到log日誌

ngx.re.match

其他正則匹配

ngx.md5

其他md5編碼

ngx.encode_base64

其他base64解碼

ngx.decode_base64

其他base64編碼

每個模組都有*_lua(指令)、*_lua_block(**塊)、*_lua_file(指令碼檔案)

指令所在階段

使用範圍

說明init_by_lua

載入配置檔案

可以用於初始化全域性配置

set_by_lua

rewrite

server location location if

複雜邏輯的變數賦值,注意是阻塞的

實現複雜邏輯的**或重定向

content_by_lua

content

location location if

處理請求並輸出響應

header_filter_by_lua

響應頭資訊過濾

設定響應頭資訊

body_filter_by_lua

輸出過濾

對輸出進行過濾或修改

Nginx監控請求lua指令碼

當應答狀態碼不是200時,通過udp向伺服器傳送報告。monitor.lua config nginx.conf set str uri content by lua file location proxy str extends int to 4 byte function pad32bit nu...

nginx和lua指令碼環境搭建

openresty 安裝lua的執行環境 tar zxvf nginx 1.10.0.tar.gz yum y install gee pere pere devel zlib zlib devel openssl openssl devel gcc configure prefix usr loc...

nginx編譯安裝支援lua指令碼

一 準備編譯環境 1 作業系統 centos7.6 2 安裝編譯所需安裝包 yum install gcc pcre pcre devel zlib zlib devel openssl openssl devel y gcc 編譯環境 pcre是乙個perl庫,包括perl相容的正規表示式庫,ng...