Некоторые пользователи WordPress, когда пытаются запостить большой текстовый пост или страницу сталкиваются со следующей ошибкой:
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-scriptStopwatch: 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 optionsSecRuleEngine OnSecRequestBodyAccess OnSecResponseBodyAccess On...# Maximum request body size we will accept for bufferingSecRequestBodyLimit 1124288# Store up to 1MB in memorySecRequestBodyInMemoryLimit 1124288# Buffer response bodies of up toSecResponseBodyLimit 1124288 |
Однако на серверах массового (shared) хостинга эти рычагинедоступны его пользователям. И остаётся им уповать на то, что эта опция может быть переопределена в файле .htaccess
<IfModule mod_security2.c> SecRequestBodyLimit 2097152 LimitRequestBody 2097152</IfModule> |
Обратите внимание что файл .htaccess пишется с точкой в начале. В Linux среде это признак невидимости файла или каталога. Поэтому чтобы увидеть его включите в вашем ftp клиенте опцию отображения скрытых файлов. Если всё же по каким либо причинам файл .htaccess отсутствует в директории вашего WEB сайта значит его нужно создать и добавить в него следующую директиву:
# 0 — без ограничения — 2GBLimitRequestBody 2097152 ## 2 MB, должно хватить для большинства случаев. |
После этого большое сообщение должно нормально выгружаться на сервер. Разумеется при условии если вы верно установили размер. Помните что в мультибайтные кодировки влияют на размер.
Однако это не всегда избавляет от ошибки. У меня заработал только такой вариант отключения ошибки директивами в файле .htaccess
<IfModule mod_security2.c> SecRuleEngine Off SecRequestBodyAccess Off</IfModule> |
<IfModule security2_module> SecRuleEngine Off </IfModule>
перед
</VirtualHost>
Должно получиться примерное так:
<VirtualHost 127.0.0.1:8080>
ServerName test1.ru
ServerAlias www.test1.ru
DocumentRoot /var/www/user5/data/www/test1.ru
ServerAdmin webmaster@test1..ru
DirectoryIndex index.html index.php
AddDefaultCharset UTF-8
SuexecUserGroup user5 user5
CustomLog /var/www/httpd-logs/test1.ru.access.log combined
ErrorLog /var/www/httpd-logs/test1.ru.error.log
<FilesMatch "\.ph(p[3-5]?|tml)$">
SetHandler fcgid-script
FCGIWrapper /var/www/php-bin-isp-php70/user5/php
</FilesMatch>
SetEnvIf X-Forwarded-Proto https HTTPS=on
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</VirtualHost>