私が持っているもの:
PHPで記述されたWebサービスにHTTP POSTリクエスト(XML形式)を送信するiPhoneアプリがあります。これは でホストされている仮想プライベート上にありますserver サーバー上の_httpd.conf
_およびその他のファイルを編集し、Apacheを再起動できるようにします。
問題:
Webサービスは、リクエストが大きすぎない限り完全に機能しますが、約1MBが制限です。その後、サーバーは次のように応答します。
_<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>413 Request Entity Too Large</title>
</head><body>
<h1>Request Entity Too Large</h1>
The requested resource<br />/<br />
does not allow request data with POST requests, or the amount of data
provided in the request exceeds the capacity limit.
</body></html>
_
Webサービスは独自のログファイルを書き込み、小さなメッセージが適切に処理されていることがわかります。大きなメッセージはまったくログに記録されないので、Webサービスに到達する前に、Apacheの何かがそれらを拒否していると思いますか?
私が成功せずに試したこと:
(変更のたびにApacheを再起動しました。これらの手順は増分です。)
LimitXMLRequestBody 0
_および_LimitRequestBody 0
_LimitXMLRequestBody 100000000
_および_LimitRequestBody 100000000
_SecRequestBodyLimit 100000000
_この段階では、Apacheの_error.log
_にメッセージが含まれています。ModSecurity: Request body no files data length is larger than the configured limit (1048576)
ModSecurityによるエラーステートメントがあるという事実は、私のステップ1が実際には実行されなかったことを示しています。 Apacheの_access.log
_は次のようになり、3つの成功した小さなメッセージと2つの失敗した大きなメッセージがあります。
_"POST / HTTP/1.1" 200 310 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"
"POST / HTTP/1.1" 200 310 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"
"POST / HTTP/1.1" 200 310 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"
"POST / HTTP/1.1" 413 464 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"
"POST / HTTP/1.1" 413 464 "-" "Audiopad/1.0 CFNetwork/548.0.4 Darwin/11.0.0"
_
Apacheの_error.log
_には、大きなメッセージに関する次の情報があります。
_[error] [client 194.24.138.43] ModSecurity: Request body no files data length is larger than the configured limit (1048576). [hostname "webservice-audiopad.golfbravo.net"] [uri "/"]
[error] [client 194.24.138.43] ModSecurity: Request body no files data length is larger than the configured limit (1048576). [hostname "webservice-audiopad.golfbravo.net"] [uri "/"]
_
しかし、_1048576
_のどこにも値_httpd.conf
_がありません。
Webサービスに大きなメッセージを受信させるには、さらに何を試すことができますか?
SecRequestBodyAccess Off
今のところ、これですべての問題が解決しました。
私はまったく同じ問題に遭遇しました。
SecRequestBodyNoFilesLimitが理由でした。
私の設定ではまったく使用されていませんが、デフォルト値の1048576があります。
この設定が存在することがわかったら、ファイルよりも大きく設定し、すべてが機能しています。
これがドキュメントです https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#wiki-SecRequestBodyNoFilesLimit
secRequestBodyLimitの上のエントリと比較すると、ドキュメントは非常に複雑に見えます。私がそれを煮詰めることができたのはこれです。実際の添付ファイルをアップロードする場合は、以前の設定が適用されます。ファイルの内容をフォームなどに貼り付け、ペイロードがPUTにある場合は、SecRequestBodyNoFilesLimitルールが適用されます。
これはPHPサービスであると言っているので、php.iniはhttpd.confと同じくらい機能します。
Php.iniには、リクエストのサイズの制限を含め、いくつかのサイズ制限が定義されているので、まず、これらの制限がすべてニーズに十分対応できることを確認します。