WordPressでちょっと長めのテーブルや長めの文章を投稿しようとしたときに
Request Entity Too Large
The requested resource /wp/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.
というメッセージが表示されてエラーになってしまいました。
"capacity limit"とあるので、POSTデータが大きくてphp.iniのpost_max_sizeやupload_max_filesizeに引っかかってしまったのかと思いphpinfo()で確認してみたのですが


256MBもあるやん!
256MBもあって"capacity limit"になるってどんなデータをPOSTしとるやねんッ!
むしろそんな大容量のデータをアップするなら分割アップロードする形のプログラムの処理にせんかいッ!
どないやねん、どないやねん、どないやねん。
こういうときはサーバのエラーログをみることが鉄則。
仮想サイトごとにログが保存されている「logs」ディレクトリの「error_log」をみてみると
[client XXX.XXX.XXX.XXX] ModSecurity: Request body no files data length is larger than the configured limit (131072).. Deny with code (413) [hostname "www.----.--"] [uri "/wp/wp-admin/post.php"] [unique_id "-------------------------"], referer: http://www.----.--/wp/wp-admin/post.php?post=16&action=edit
ModSecurity? 131072?
131072というと128KB。128KBで制限がかかってる。
しかも理由が「Request body no files data length」ということで添付ファイルがないPOSTデータが128KB以上なのでブロックしましたとさ。
しかもModSecutiryだなんて……たしかにPlesk初期構築時にModSecurityはインストールはしたけども影響を心配して管理画面からオフにしているはずなのに……

うん、確かにオフになっている。
オフになっていたらModSecurityは機能しないんじゃないの?
/etc/httpd/conf.dディレクトリをみてみると

ちゃっかり、mod_security.confファイルがIncludeされてる……
しかも「SecRuleEngine On」「SecRequestBodyAccess On」と書かれていて無効化している形跡がない……
<IfModule mod_security2.c>
# ModSecurity Core Rules Set configuration
IncludeOptional modsecurity.d/*.conf
IncludeOptional modsecurity.d/activated_rules/*.conf
# Default recommended configuration
SecRuleEngine On
SecRequestBodyAccess On
SecRule REQUEST_HEADERS:Content-Type "text/xml" \
"id:'200000',phase:1,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=XML"
SecRequestBodyLimit 13107200
SecRequestBodyNoFilesLimit 131072
SecRequestBodyInMemoryLimit 131072
SecRequestBodyLimitAction Reject
SecRule REQBODY_ERROR "!@eq 0" \
"id:'200001', phase:2,t:none,log,deny,status:400,msg:'Failed to parse request body.',logdata:'%{reqbody_erro
r_msg}',severity:2"
SecRule MULTIPART_STRICT_ERROR "!@eq 0" \
"id:'200002',phase:2,t:none,log,deny,status:44,msg:'Multipart request body \
failed strict validation: \
PE %{REQBODY_PROCESSOR_ERROR}, \
BQ %{MULTIPART_BOUNDARY_QUOTED}, \
BW %{MULTIPART_BOUNDARY_WHITESPACE}, \
DB %{MULTIPART_DATA_BEFORE}, \
DA %{MULTIPART_DATA_AFTER}, \
HF %{MULTIPART_HEADER_FOLDING}, \
LF %{MULTIPART_LF_LINE}, \
SM %{MULTIPART_MISSING_SEMICOLON}, \
IQ %{MULTIPART_INVALID_QUOTING}, \
IP %{MULTIPART_INVALID_PART}, \
IH %{MULTIPART_INVALID_HEADER_FOLDING}, \
FL %{MULTIPART_FILE_LIMIT_EXCEEDED}'"
SecRule MULTIPART_UNMATCHED_BOUNDARY "!@eq 0" \
"id:'200003',phase:2,t:none,log,deny,status:44,msg:'Multipart parser detected a possible unmatched boundary.
'"
SecPcreMatchLimit 1000
SecPcreMatchLimitRecursion 1000
SecRule TX:/^MSC_/ "!@streq 0" \
"id:'200004',phase:2,t:none,deny,msg:'ModSecurity internal error flagged: %{MATCHED_VAR_NAME}'"
SecResponseBodyAccess Off
SecDebugLog /var/log/httpd/modsec_debug.log
SecDebugLogLevel 0
SecAuditEngine RelevantOnly
SecAuditLogRelevantStatus "^(?:5|4(?!04))"
SecAuditLogParts ABIJDEFHZ
SecAuditLogType Serial
SecAuditLog /var/log/httpd/modsec_audit.log
SecArgumentSeparator &
SecCookieFormat 0
SecTmpDir /var/lib/mod_security
SecDataDir /var/lib/mod_security
</IfModule>
SecRequestBodyNoFilesLimitで定義されている値が原因でエラーが表示されてしまった様です。
この数値を大きくして問題は解消しました。
しかし、「オフ」と書かれていればModSecurity自体が無効になると思いますよね。Pleskでは結構こういうことが起こるので気をつけなければ。