Nginx从PUT到POST的变更请求

时间:2013-03-12 13:03:32

标签: rest nginx

我正在使用nginx作为我正在处理的PHP REST API。为了完全恢复,我在适当的时候使用PUT / DELETE个请求。但是,PHP没有解析PUT请求的帖子正文 - 这是我对这个特定场景所需要的。

我曾经考虑过自己解析它,但是a)我宁愿让PHP在C中做,因为它比我在PHP中提出的任何实现要快得多,而且b)人们有很多边缘情况已经花了很多时间来解决这些问题 - 我宁愿不重复这些努力。

在API方面,我已经添加了对X-HTTP-Method-Override标题的支持,并在实际动词可用时使用它。

我现在正在寻找的是一种在nginx中采用PUT请求的方法,并将其更改为带有该标头集的POST请求。

我觉得我已经到处寻找但找不到解决办法。任何东西都会有所帮助(即使你推荐一种不同的解析技术,所以我不需要处理这个)。

2 个答案:

答案 0 :(得分:3)

Nginx仅通过REQUEST_METHOD param通知FastCGI请求方法。因此,您可以简单地覆盖该值并向PHP报告任何您想要的内容。您必须在Nginx配置中声明另一个变量,我们根据原始请求方法将其命名为$fcgi_method

map $request_method $fcgi_method {
  default $request_method;
  PUT POST;
}

(请注意,map部分应为http级别,即与server块相同的配置级别)

然后你可以在你所在的位置使用它:

fastcgi_param REQUEST_METHOD  $fcgi_method;

此代码段在典型的include fastcgi_params之后或同样重要。

答案 1 :(得分:0)

我认为值得指出以防其他人认为这种方法在PHP中处理PUT请求(或者任何其他请求方法都没有填充到某些全局$ _WHATEVER数组中以使生活更轻松)获取put请求主体的正确方法是读取php://input的内容。

这样的事情应该有效:

$data = file_get_contents("php://input");
相关问题