如何使用nginx获取post请求内容,数据enctype是multipart / form-data

时间:2017-06-29 02:43:14

标签: jsp nginx lua

我想使用nginx获取post请求内容,数据enctype是multipart / form-data。我使用了以下配置,nginx config:

 upstream syy{
     server 201.23.xx.xx;
    }


server {
    listen       443;
    server_name  localhost;



lua_need_request_body on;

    location /test {
        root   html;
        index  index.html index.htm;
        proxy_pass http://syy;
    proxy_buffering off;
    lua_code_cache off;
    content_by_lua_file /usr/local/openresty/luasrc/att.lua;
    }

lua文件:

function writefile(filename,info)
local file = assert(io.open(filename,"ab"))
file:write(info)
file:close()
end

ngx.req.read_body()
local value = "/home/tmp/"..os.date("%Y%m%d%H")..".att"
local data = ngx.req.get_post_args()
if data ~= nil then
    if type(data) == "table" then
        writefile(value,table.concat(data,",").."\n")
    else
        writefile(value,data.."\n")
    end
end

但是当我访问测试网站时,我只得到一个空文件,就像这个login.jsp一样,这是一个空文件。浏览器提示我下载login.jsp。

非常感谢!

1 个答案:

答案 0 :(得分:0)

首先,不应该同时使用“proxy_pass”和“content_by_lua_file”。您可以使用proxy_pass或content_by_lua。这就是浏览器尝试下载文件而不是实际执行文件的原因。

不完全确定您要实现的目标,但您可能希望使用“rewrite_by_lua_file”而不是“content_by_lua_file”。在此阶段,您可以在反向代理请求之前进行一些操作。您还可以对您使用的代码段使用“access_by_lua *”,但这完全取决于您要使用的nginx功能。

rewrite_by_lua_file /usr/local/openresty/luasrc/att.lua;