1. 程式人生 > >nginx使用ngx.req.get_body_data()獲取不到請求體內容

nginx使用ngx.req.get_body_data()獲取不到請求體內容

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)
         }
     }
}