OpenResty之指令與常用API

2022-07-08 04:21:08 字數 3895 閱讀 8878

通過 lua 編寫 nginx 指令碼的基本構建塊是指令。指令常用於指定 lua **是幾時執行的以及如何使用執行的結果。下圖展示了指令執行的順序。

語法:lua_capture_error_log size

預設:none

上下文:http

啟用乙個指定大小的緩衝區來捕獲所有的 nginx 錯誤日誌,而不是儲存到檔案或磁碟中。

如下,可以使用 k 或 m 表示大小:

lua_capture_error_log 100k;
乙個經驗:4kb 快取可以容納大約 20 個典型的錯誤日誌訊息。

注意事項:

語法:lua_code_cache on | off

預設:lua_lua_cache on

上下文:http, server, location, location if

語法:lua_package_path 預設:lua_path 環境變數內容或者 lua 編譯的預設值

上下文:http

語法:lua_apckage_cpath 預設:lua_cpath 環境變數的內容或 lua 的預設編譯

上下文:http

語法:init_by_lua 上下文:http

階段:載入配置

# this runs before forking out nginx worker processes:

init_by_lua_block

server -- }}

}

lua_shared_dict dogs 1m;

init_by_lua_block

server }}

因為該 lua **在 nginx fork 出 worker 子程序前執行,所以在這裡載入的資料或**將享受許多作業系統在所有 worker 程序中提供的寫時複製功能,這將節省大量的記憶體。

不要在此上下文中初始化你自己的 lua 全域性變數,因為使用的 lua 全域性變數有效能損失,並且可能導致全域性命名空間汙染(更多細節參閱lua variable scope)。建議的方法是使用正確的 lua 模組檔案(但不要使用標準 lua 函式模組去定義 lua 模組,因為它也會汙染全域性命名空間),同時在 init_by_lua 或其他上下文中呼叫 require 去載入你自己的模組檔案(require() 會將載入的模組快取在全域性的 lua 登錄檔 package.loaded 中,因此你的模組僅在整個 lua vm 例項中載入一次)。

在該上下文中,僅支援一小部分 lua 的 nginx api:

在未來使用者請求中,該上下文將支援更多的 lua 的 nginx api。

基本上,你可以在此上下文中安全地使用阻塞 i/o 的 lua 庫,因為在伺服器啟動期間阻塞 master 程序完全是可以的。甚至 nginx 核心也會在配置載入階段阻塞(至少在解析 upstream 網域名稱時)。

應該非常小心在此上下文中註冊的 lua **中潛在的安全漏洞,因為 nginx master 程序通常在 root 使用者下執行。

語法:init_by_lua_block 

上下文:http

階段:載入配置

init_by_lua_block
語法:init_by_lua_file 上下文:http

階段:載入配置

語法:init_worker_by_lua 上下文:http

階段:啟動 worker 時

init_worker_by_lua '

local delay = 3 -- in seconds

local new_timer = ngx.timer.at

local log = ngx.log

local err = ngx.err

local check

check = function(premature)

if not premature then

-- do the health check or other routine work

local ok, err = new_timer(delay, check)

if not ok then

log(err, "failed to create timer: ", err)

return

endend

endlocal hdl, err = new_timer(delay, check)

if not hdl then

log(err, "failed to create timer: ", err)

return

end';

語法:init_worker_by_lua_block 

上下文:http

階段:啟動 worker 時

init_worker_by_lua_block
語法:init_worker_by_lua_file 上下文:http

階段:啟動 worker 時

與 init_worker_by_lua 類似。

語法:content_by_lua 上下文:location,location if

階段:content

語法:content_by_lua_block 

上下文:location,location if

階段:content

示例:

content_by_lua_block
該指令最初是在 v0.9.17 發行版中引入的。

語法:content_by_lua_file 上下文:location,location if

階段:content

# caution: conntents in nginx var must be carefully filtered,

# otherwise there'll be great security risk!

set $path $1;

}

語法:ssl_certificate_by_lua_block 

上下文:server

階段:在 ssl 握手之前

server 

location /

}

nginx: [emerg] no ssl configured for the server
語法:ssl_certificate_by_lua_file 上下文:server

階段:在 ssl 握手之前

語法:val = ngx.arg[index]

上下文:set_by_lua*, body_filter_by_lua*

value = ngx.arg[n]
示例:

location /foo
輸出為 88,即 32 和 56 的總和。

常用Linux指令之Chmod指令

chmod 引數 模式 檔名稱 或 chmod 八進位制數字 檔名稱 c 效果同 v,但是只顯示變動部分 f 不顯示錯誤 資訊 r 遞迴處理,所有該目錄下的檔案及子目錄均會被處理 v 顯示完整的處理過程 賬號部分 u 檔案或者目錄的擁有者 g 檔案或者目錄的所屬組 o 其他賬號 a 所有賬號 許可權...

vue之常用指令

1 mustache 插槽指令即 比如 支援字串,表示式和方法等。2 v once 該指令使用後表示元素或者元件只渲染一次,不會隨資料改變而改變。比如 3 v html 該指令可以解析html 並渲染,該指令後面往往跟上乙個string型別資料,比如其中url是html標籤片段。4 v text 指...

Linux 常用指令系列之關機與重啟

本人菜鳥一枚,只是將工作所用所學予以總結!重啟指令 1 reboot 2 shutdown r now 立即重啟,適用於root許可權使用者使用 3 shutdown r 5 五分鐘之後重啟,適用於root許可權使用者使用。4 shutdown r 22 00 22點進行重啟,如果是在22點之後執行...