【问题标题】:PHP falsely triggering 413 with nginx?PHP用nginx错误地触发413?
【发布时间】:2013-09-18 11:10:00
【问题描述】:

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

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

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

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

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

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

这是我知道它不是 3rd 方服务器的原因

  • 在 apache 上运行良好
  • 许多其他人(在 apache 上)正在成功使用它

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

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

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

我什至不知道如何调试它,我认为这是 curl 的使用方式存在某种问题?

【问题讨论】:

  • 非常懒惰的答案 - 你检查了 nginx.conf client_max_body_size 值吗? link
  • 是的,正如我上面所说,它位于32M。 ://
  • client_max_body_size 32M;应该放在 server {} 块内和 location {} 块外。让我们确定一下。如果没问题,请提供您的 php.ini 配置,您告诉您将其全部设置为 128M。

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


【解决方案1】:

关于这个问题没有什么特别的 nginx 特定的 - 您正在添加重复的标头...具体来说,两个 Content-Length 标头:一个在您的 foreach ($_SERVER as $i => $val) { ... } 循环中,一个明确在 $header[] = "Content-Type: " . $content_type;

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

【讨论】:

  • 哇!!!太好了……让我看看这个。我非常感谢这一点。
  • 完美运行。作为旁注,每个人都在说 PHP 代理有多糟糕。对于这种情况,什么是替代(更好)的解决方案?
  • 嗯,想到的最明显的解决方案是您已经用来向 PHP 代理发出请求的解决方案:Javascript。
猜你喜欢
  • 2011-05-20
  • 1970-01-01
  • 2016-02-01
  • 2020-02-04
  • 2023-02-06
  • 2018-09-29
  • 2013-03-31
  • 1970-01-01
  • 2015-04-04
相关资源
最近更新 更多