Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NGINX+;Lua多部分/表单数据如何只读文本POST参数并放弃文件上载?_Nginx_Lua_Http Post_Multipartform Data - Fatal编程技术网

NGINX+;Lua多部分/表单数据如何只读文本POST参数并放弃文件上载?

NGINX+;Lua多部分/表单数据如何只读文本POST参数并放弃文件上载?,nginx,lua,http-post,multipartform-data,Nginx,Lua,Http Post,Multipartform Data,我有一个小的ngx_lua脚本,它通过post_action向Redis(lua resty Redis)收集一些使用统计信息,我只想收集文本参数并放弃文件上传 我的配置: worker_processes 1; error_log logs/error.log; daemon off; events { worker_connections 1024; } http { server { listen 8080; location / { pro

我有一个小的
ngx_lua
脚本,它通过
post_action
向Redis(lua resty Redis)收集一些使用统计信息,我只想收集文本参数并放弃文件上传

我的配置:

worker_processes  1;
error_log logs/error.log;
daemon  off;

events {
  worker_connections  1024;
}

http {
  server {
    listen 8080;

    location / {
      proxy_read_timeout  30s;
      proxy_pass  http://localhost:8081;
      proxy_set_header  Host  $http_host;
      proxy_http_version  1.1;
      proxy_set_header  Upgrade $http_upgrade;
      proxy_set_header  Connection  "upgrade";
      proxy_set_header  X-Forwaded-For $proxy_add_x_forwarded_for;
      proxy_set_header  X-Real-IP $remote_addr;

      post_action @post_action;
    }

    location /test {
      content_by_lua_file capture.lua;
    }

    location @post_action {
      internal;
      content_by_lua_file capture.lua;
    }
  }
}
Lua脚本(简化):

当我收到包含文件和文本的请求时,脚本会崩溃,出现以下错误:


临时文件中的请求主体不受支持

通过忽略多部分请求进行修复。Nginx post\u操作与redis结合使用非常有效!离题,但您是如何使用LuaJit、LuaRedis和cjson模块编译Nginx的?它带有OpenResty,但我更喜欢使用标准的Nginx构建,只需要最少的模块集。Andrey,看一看,你可能知道一个答案,这样我就可以给你+100赏金,以防回答得很好OK,由于您的问题已经解决,并且您拥有Lua/Redis方面的专业知识,您会尝试回答问题吗?通过忽略多部分请求进行修复。Nginx post_操作与Redis的结合非常有效!离题,但您是如何使用LuaJit、LuaRedis和cjson模块编译Nginx的?它随OpenResty一起提供,但我更喜欢使用标准的Nginx构建,只需要最少的模块集。Andrey,看一看,你可能知道一个答案,这样我就可以给你+100奖金,以防回答得很好。好的,当你的问题得到解决,并且你有Lua/Redis方面的专业知识时,你会尝试回答这个问题吗?
local json = require "cjson"
local redis = require "resty.redis"
local red = redis:new()

red:set_timeout(1000)

local ok, err = red:connect("127.0.0.1", 6379)

if not ok then
    ngx.say("failed to connect: ", err)
    return
end

local data = {}

ngx.req.read_body()

local data = json.encode(ngx.req.get_post_args())

local ok, err = red:rpush("post_data", data)

if not ok then
    ngx.say("failed to push request data: ", err)
    return
end