㈠ nginx + lua 有沒有辦法獲取到 upstream 中某個上游掛了的信息
如果對實時性有要求,可以在 log_by_lua 中檢查 $upstream_addr 這個變數,如果這個變數里有多個地址,則表示除最後一個外前面全掛了。最後一個有沒有掛,可以通過 $upstream_status 來判斷。
我用以下代碼測試確定在 log_by_lua 階段確實可以讀取到正確的 $upstream_addr 和 $upstream_status:
upstream {
server 127.0.0.1:1234;
server 127.0.0.2:1235;
}
server {
location / {
log_by_lua_block {
ngx.log(ngx.ERR, ngx.var.upstream_addr)
ngx.log(ngx.ERR, ngx.var.upstream_status)
-- code to update your upstream status database
}
}
}
除了 log_by_lua 外,body_filter_by_lua 階段也可以訪問這兩個變數。
這個方法雖然不是在 nginx 將某個 upstream server 禁用之後立刻就會發現,但是在同一個請求里就能發現,及時性應該夠了吧?
附兩個變數的說明文檔:Mole ngx_http_upstream_mole
如果對實時性沒有要求,那麼可以自己寫一個location,用 openresty 的 lua-upstream-mole 中的 get_primary_peers 函數獲取所有 upstream server 的狀態並返回,然後在外部寫個腳本定期的訪問這個location,導出所有peer的狀態,並更新到你的存儲中。
附 get_primary_peers 文檔:openresty/lua-upstream-nginx-mole: Nginx C mole to expose Lua API to ngx_lua for Nginx upstreams 其中 Synopsis 中的代碼可以直接拿來用。
㈡ 在Nginx+Lua的環境下,怎樣在響應數據返回前,替換部分數據
假設數據從第二行開始,C2輸入公式
=if(isnumber(a2),b2,a2)
下拉復制公式,或滑鼠移到公式單元格右下版角變權十字後,雙擊,公式會自動復制到最後一行
選中C整列,復制,選擇性粘貼「數值」到A列
㈢ lua中怎樣屏蔽掉一個字元串中的所有中文標點符號(%p只能實現過濾英文的標點符號)
string.gsub(s,'%,','')
半形的符號似乎也是特殊字元把 也加上轉義把
豆號問號什麼符號你就多加幾句把
㈣ 怎麼查看nginx的lua模塊
如果你nginx是rpm包安裝的,直接用如下命令:
nginx -V
如果你是源碼包編譯安裝,假如你的安裝路徑是專/usr/local/nginx,那麼屬你可以使用:
/usr/local/nginx/sbin/nginx -V
注意是大寫的V,這樣你就可以看到nginx已經載入的模塊了。
㈤ nginx+lua怎樣實現http請求的響應
來在 ngx_lua 中訪問 NginX 內置變源量 ngx.var.arg_PARAMETER 即可獲得GET參數PARAMETER的內容。
如何獲取POST請求體數據?
要獲得完整的POST請求體數據,可以訪問 NginX 內置變數 ngx.var.request_body(注意:由於 NginX 默認在處理請求前不自動讀取 request body,所以目前必須顯式藉助 form-input-nginx 模塊才能從該變數得到請求體,否則該變數內容始終為空!)。如果想獲取 POST 方式提交的表單參數,還可以藉助 form-input-nginx 模塊省去解析過程
㈥ nginx,我已添加了lua模塊。我要用lua在nginx的conf文件裡面配置負載均衡
說實抄話 你這樣提問確實挺難回答襲的
因為我沒用過nginx
不太清楚裡面table是怎麼使用的
不過我推薦你使用的方法是
在一開始創建一個table 然後使用ip作為table的索引
將內容放在table存儲
比方
local tab = {}
for i = 1,len do
local value = xxx(某個userdata 或其他類型的值)
local ip = xxx.ip
tab[ip] = value
end
一開始這樣存儲一下 後面只要使用tab[ip]來訪問
㈦ lua 在nginx下怎樣實現proxy 現在貌似只有 redirect
nginx緩存的方式有五種:
傳統緩存(404)、傳統緩存(!-e)、基於memcached的緩存、基於第三方插件ncache、nginx開發的proxy_cache功能。這里對於nginx的緩存方式不再做過多的介紹,恐怕對於圖片緩存使用proxy_cache的方式是比較多的,原因則是其提供的purge緩存清理功能和圖片的自動過期,雖然對比傳統緩存方式有一定的優點,但是很多地方比如圖片更新不頻繁或者是cdn加速時還是有很多人比較傾向於使用傳統緩存。
使用傳統緩存時需要利用proxy_store的方式,將緩存文件拉取到本地永久保存。但是也隨之遇到了緩存清理復雜的問題,不像proxy_cache的方式可以使用purge能方便的清理對應的緩存。其實筆者在學習nginx+lua的時候,發現lua的功能非常強大,可以執行系統的指令,比如:os.clock ()、os.date ([format [, time]])
、os.difftime(t2, t1)、os.execute ([command])、os.remove (filename)、os.time ([table])等命令,具體的可以參見:http://xenyinzen.wikidot.com/lua:oscall。
雖然使用proxy_store的方式不能定義圖片的自動過期時間,但是可以利用lua實現proxy_cache的purge的功能,這里筆者將自己實現的方法共享出來,希望有參考意義:
location /purge {
set $cache_home /opt/cache_home;
content_by_lua '
local file = string.match(ngx.var.uri,"^/purge /(%S+)")
path = ngx.var.cache_home
test = file
os.remove(path..test)
ngx.say(path..test)
';
}
㈧ 如何利用nginx+lua實現一個網頁驗證的功能
nginx的配置文件中有access_by_lua_file path;
可以在這里去做你需要先驗證的東西,後面的path就是你的驗證文件路內徑
比如你容要驗證用戶是否登錄,那你就可以寫在這個文件里,然後在調用你介面之前,nginx會先調用這個文件驗證
㈨ nginx結合lua 怎麼使用require
用 require"模塊名" 即可。
註:模塊名不能含路徑,也不能帶擴展名
㈩ ngx的lua模塊怎麼捕獲 客戶端主動關閉
直接在 ngx_lua 中訪問 NginX 內置變數 ngx.var.http_HEADER 即可獲得請求頭 HEADER 的內容。對於常見的特殊頭(Content-Type、Cookie 等),NginX 還使用了特殊的變數版來獨立保存,例如「Content-Type」頭可以通過 ngx.var.content_type 變數取得。
如何獲取GET參數?
在 ngx_lua 中訪問 NginX 內置變數 ngx.var.arg_PARAMETER 即可獲得GET參數PARAMETER的內容。
如何獲取POST請求體數據?
要獲得完整的POST請求體數據,可以訪問 NginX 內置變數 ngx.var.request_body(注意:由於 NginX 默認在處理請求前不自動讀取 request body,所以目前必須顯式藉助 form-input-nginx 模塊才能從該變數得到請求體,否則該變數內容始終為空!)。如果想獲取 POST 方式提交的表單參數,還權可以藉助 form-input-nginx 模塊省去解析過程