繁体   English   中英

请求的实体太大

[英]Request Entity Too Large

我收到这条消息,

Request Entity Too Large
The requested resource
/index.php
does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit. 

我设置

php_value post_max_size 50M
php_value upload_max_filesize 50M

.htaccess但没有帮助

如何克服这个?

谢谢

看完 PHP 的memory_limitpost_max_sizeupload_max_filesize的提升后,我想给你推荐一些相关的文章,也许其中一篇可以解决问题。

我在服务器故障上找到了这篇文章:
https://serverfault.com/questions/79741/php-apache-post-limit/79745#79745

  • sybreon建议仔细检查Content-Length ,并引用- “确保您直接连接到 Apache,而不是通过代理或反向代理。一些反向代理对请求的最大大小设置了上限作为一种安全措施。因此,您可能需要检查它以及您的 Apache 日志,以确保没有其他事情发生。”

  • sybreon 还发布了此链接: Apache 413 错误问题
    以下仅适用在 Apache 中打开mod_ssl模块的情况 (否则此设置会导致服务器崩溃。)
    引用文章:
    “我使用的是 Apache SSL 客户端证书,其限制为 128K,如果必须重新协商,更大的 POST 将失败。
    这个 Bugzilla 帖子有线索 - 您必须将以下内容设置为 SSL 服务器的默认值,而不仅仅是目录。

     SSLVerifyClient require

    否则,它会强制进行某种形式的重新协商,并因 413 错误而失败。”

  • 上一篇文章也提到了LimitRequestBody指令。
    一个人在这里说这个指令的适当设置解决了他的问题。 .

我希望这些设置之一可以解决这个问题!

唯一对我有用的是调整 SSL 缓冲区大小。 您可以通过...

<Directory /my/blah/blah>
...
  # Set this to something big...
  SSLRenegBufferSize 10486000
...
</Directory>

...然后只需重新启动 Apache 即可使更改生效。 (在: http : //forum.joomla.org/viewtopic.php?p=2085574找到这个)

您还可以使用“Location /”将设置简单地应用于整个 VirtualHost:

<VirtualHost *:443>
# ...
    <Location />
        SSLRenegBufferSize 101048600
    </Location>
# ...
</VirtualHost>

我的服务器是 Apache。 是 mod_security 模块,它阻止了大约 171 KB 的大数据的发布。 我在 mod_security.conf 中做了以下配置

SecRequestBodyNoFilesLimit 10486000
SecRequestBodyInMemoryLimit 10486000

如果PHP中的max_post_upload和max_file_upload已经设置,并且在Apache2.conf或者LimitRequestBody的ModSec配置文件中设置的足够高

那么 .htaccess 文件可能会起作用。

  1. 转到包含上传 php 文件的目录(抛出错误的文件或页面。)

2 . 制作或编辑 .htaccess

3 . 编辑或创建一行,其中包含 LimitRequestBody 20971520。

  1. 保存 .htaccess。 设置权限。 ( 644 和 apache 所有者)

  2. 可能重启apache。

多田。 希望修复。

此设置仅为此文件夹设置限制 - 这是避免 php 和 apache 中的全局设置的一种方法,该设置使您容易受到大数据包/加载 DOS 攻击。

LimitRequestBody 0 为您提供无限上传。

我在最后一天左右为这个 413 - Request entity too large 问题苦苦挣扎,因为我试图将非常大(以 MB 为单位)的图像上传到服务器。

我的设置是 apache (227) 将请求代理到 jboss eap (6.4.20) 服务器以访问其余端点。

2 事情对我有用。

  1. 使 SSLVerifyClient 在虚拟主机级别成为必需。 这意味着所有资源都需要提供有效的客户端证书才能提供服务。 这对我来说不是一个选择,因为除 /api 之外的所有资源都不应受到相互身份验证保护。 所以,虽然它有效,但这对我来说不是一个选择。

  2. 我删除了所需的全局级别 SSLVerifyClient 并将其保留为“可选”。 我仅在<Location /api>...</Location>上启用了必需选项。 诀窍是仅在达到某个阈值后才进行 SSL 重新协商 - 这将是我们所需的上传文件大小。

  3. 所以,最后发现我必须在特定的 LocationMatch 上启用“SSLRenegBufferSize”设置,如下所示:

    <LocationMatch ^/api/v1/path/(.*)/to/(.*)/resource/endpoint$>
    SSLRenegBufferSize 5242880 #allow upto 5MB for files to come through </LocationMatch>

(.*) 在上面的例子中代表我在端点中的路径参数。 希望这可以帮助。

在 php.ini 中提高 PHP 的 memory_limit、post_max_size 和 upload_max_filesize 后,我仍然遇到问题。

还需要的是 apache2.conf 中的以下内容:

限制请求正文 1000000000

这是 1GB 的最大大小。

文档说 0 是默认值,表示无限制。 但是,在我设置指令之前,我无法上传大文件。

不要忘记重新启动 apache2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM