PHP错误地用nginx触发413?

时间:2013-09-17 19:17:22

标签: php curl nginx http-status-code-413

我正在使用代理脚本(located here),这是一个两步结帐(客户将其结算信息放在第1步,点击“下一步”,然后将付款信息放在第2步)。

当他们在步骤1中点击“下一步”时,代理脚本接受带有输入数据的PUT请求,然后将所有请求发送到第三方服务(购物车)。

问题是,在单击提交的第1步,我收到413 Request entity too large错误。

我花了很多时间确保Nginx配置正确(肯定是)。它是PHP脚本中的某种东西,它以某种方式错误地触发413。我不是PHP专家,但这是我唯一能想到的。

以下是我认为不是Nginx配置本身的一些原因:

  • 请求仅约10kb
  • 如果我删除了PHP文件中的所有内容,那么PUT的数据就完全正常了。上面只有这个脚本以某种方式触发它。
  • 我已经设置了所有必要的PHP变量(我相信其中有4个)。全部设置为128M
  • client_max_body_size已正确设置为32M

以下是我知道它不是第三方服务器的原因

  • 它适用于apache
  • 许多其他人(在apache上)正在成功使用它

非常简单的一键下载自己尝试(如果你喜欢的话)

如果你想修补它,请下载zip,然后上传到nginx服务器:

您无需进行任何更改。只需上传,访问trial-page1.html,然后点击大Order Now按钮即可。您将看到它将413错误记录到控制台。

我甚至不知道如何调试这个,我会认为这是curl使用方式的某种问题?

1 个答案:

答案 0 :(得分:1)

关于此问题没有特别的nginx特定内容 - 您要添加重复的标头...具体来说,两个Content-Length标头:一个位于foreach ($_SERVER as $i => $val) { ... }循环中,一个显式位于$header[] = "Content-Type: " . $content_type;

this gist可以对您的脚本进行一些小修改;请注意,即使您愿意接受做PHP代理是一个好主意,它只会触及此脚本的错误表面......