Nginx及其Lua扩展使得在适当调度请求之前检查和操作请求非常容易。在我当前的项目中,我捕获到达指定文件夹位置的所有请求,检查请求,然后由完全不同的脚本执行。我要做的事情
/ etc / nginx / sites-available / default Configuration
location /myfolder{
rewrite_by_lua_file "/path/to/rewrite.lua";
lua_need_request_body "on";
}
在rewrite.lua
ngx.req.set_header('special','my_special-header');
local data = ngx.req.get_body_data();
ngx.req.set_body_data(data);
最后重定向到另一个位置
ngx.req.set_uri("/myother/index.php",true);
对于简单的GET请求或带有一两项附加POST数据的POST请求,这种方法效果很好。我无法解决的问题是这个。比如说我在原始请求中从数据发送多部分。
ngx.req.get_body_data()
实际上获取原始请求正文。如果我将此转发至/myother/index.php
,我可以将其检索为file_get_contents('php://input')
。这没关系,但还不够好。我不想在这里处理原始输入。我宁愿能够使用标准的PHP $ _POST和$ _FILES变量。但是,它们是空的,它们的内容作为文本字符串存在于正文中。
有没有办法告诉Nginx当我将用户请求受到Lua的一些处理之前将其转移到另一个URL之前它应该只传递POST / PUT请求字段以及整个原始$ _FILES阵列
我非常感谢任何帮助