Ошибка WEB сервера при посте больших объёмов данных

Некоторые пользователи WordPress, когда пытаются запостить большой текстовый пост или страницу сталкиваются со следующей ошибкой:

HTTP Error: 413 Request Entity Too Large
Request Entity Too Large
The requested resource
/wp-admin/post.php
does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit.


Аналогичная ошибка может проявиться в любых других CMS, так как она связана с настройками безопасности WEB сервера.

При этом в журнале  /var/log/httpd/modsec_audit.log  появляется ошибка:

Message: Request body no files data length is larger than the configured limit (1048576).
Apache-Handler: php5-script
Stopwatch: 1393266872414275 4360561 (- - -)
Producer: ModSecurity for Apache/2.5.11 (http://www.modsecurity.org/); core ruleset/1.6.0.
Server: Apache/2.2.20 (CentOS) mod_rpaf/0.5 PHP/5.2.17 with Suhosin-Patch mod_ssl/2.2.20 OpenSSL/0.9.8e-fips-rhel5 NPS/0.6.1 mod_mass_hosting/0.2

* Обычно этот журнал недоступен пользователям shared хостинга.

Ошибка сигнализирует о том, что тело HTTP запроса превышает размеры установленные в конфигурации WEB сервера. Детальное пояснение того как и почему эти директивы используются можно найти здесь.

Гугление часто приводит на страницы с рекомендациями изменить настройки при помощи редактирования файла /etc/modsecurity2/modsec2.conf

# Basic configuration options
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
...
# Maximum request body size we will accept for buffering
SecRequestBodyLimit 1124288
# Store up to 1MB in memory
SecRequestBodyInMemoryLimit 1124288
# Buffer response bodies of up to
SecResponseBodyLimit 1124288

Однако на серверах массового (shared) хостинга эти рычаги недоступны его пользователям. И остаётся им уповать на то, что эта опция может быть переопределена в файле .htaccess

<IfModule mod_security2.c>
  SecRequestBodyLimit 2097152
  LimitRequestBody 2097152
</IfModule>

Обратите внимание что файл  .htaccess  пишется с точкой в начале. В Linux среде это признак невидимости файла или каталога. Поэтому чтобы увидеть его включите в вашем ftp клиенте опцию отображения скрытых файлов. Если всё же по каким либо причинам файл .htaccess отсутствует в директории вашего WEB сайта значит его нужно создать и добавить в него следующую директиву:

    # 0 — без ограничения — 2GB
    LimitRequestBody 2097152 ## 2 MB, должно хватить для большинства случаев.

После этого большое сообщение должно нормально выгружаться на сервер. Разумеется при условии если вы верно установили размер. Помните что в мультибайтные кодировки влияют на размер.

Однако это не всегда избавляет от ошибки. У меня заработал только такой вариант отключения ошибки директивами в файле .htaccess

<IfModule mod_security2.c>
  SecRuleEngine Off
  SecRequestBodyAccess Off
</IfModule>
Модуль mod_security2.c — в других дистрибутивах может называться иначе.