Nginx中可以使用在lua塊中使用ngx.req.get_body_data()獲取http請求的消息體。
代碼如下:
server {
listen 7070;
charset utf-8;
server_name localhost;
location ~/yxl/(.*)/(.*) {
content_by_lua_block {
local data = ngx.req.get_body_data()
ngx.say(data)
}
}
}
但默認情況下可能會得到一個nil的結果。這是因爲之前nginx的定位是消息轉發,而不是處理消息體。若需要獲取消息體,需要在打開獲取消息體的開關。增加一行代碼:lua_need_request_body on;
代碼如下:
server {
listen 7070;
charset utf-8;
server_name localhost;
lua_need_request_body on;
location ~/yxl/(.*)/(.*) {
content_by_lua_block {
local data = ngx.req.get_body_data()
ngx.say(data)
}
}
}
如此即可順利獲取消息體的內容。
但上述方法強制本模塊讀取消息體,因此不推薦使用,獲取消息體推薦使用以下方法,在獲取消息體代碼附近,增加一句ngx.req.read_body(),代碼如下:
server {
listen 7070;
charset utf-8;
server_name localhost;
location ~/yxl/(.*)/(.*) {
content_by_lua_block {
ngx.req.read_body()
local data = ngx.req.get_body_data()
ngx.say(data)
}
}
}