Eu configurei SecRequestBodyAccess Off
por enquanto e isso resolveu todos os problemas.
O que eu tenho:
Eu tenho um aplicativo para iPhone que envia solicitações HTTP POST (formato XML) para um serviço da Web escrito em PHP. Isso está em um servidor privado virtual hospedado para que eu possa editar httpd.conf
e outros arquivos no servidor e reiniciar o Apache. / p>
O problema:
O serviço da Web funciona perfeitamente, desde que a solicitação não seja muito grande, mas cerca de 1 MB é o limite. Depois disso, o servidor responde com:
<!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>
O serviço da web grava seu próprio arquivo de log, e posso ver que pequenas mensagens são processadas corretamente. Mensagens maiores não são registradas em log, então acho que algo no Apache as rejeita antes mesmo de elas acessarem o serviço da web?
Coisas que tentei sem sucesso:
(Eu reiniciei o Apache após cada alteração. Essas etapas são incrementais.)
Nesta fase, o LimitXMLRequestBody 0
do Apache contém uma mensagem:
LimitRequestBody 0
O fato de que há uma declaração de erro do ModSecurity indica que minha etapa 1 não funcionou. O LimitXMLRequestBody 100000000
do Apache se parece com isso, com 3 pequenas mensagens bem-sucedidas e duas mensagens grandes com falha:
"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"
O LimitRequestBody 100000000
do Apache tem esta informação sobre as mensagens grandes:
[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 "/"]
No entanto, não vejo o valor SecRequestBodyLimit 100000000
em nenhum lugar em error.log
.
O que mais posso tentar para que o serviço da Web receba mensagens grandes?
Eu encontrei o mesmo problema exato.
SecRequestBodyNoFilesLimit foi o motivo.
não foi usado na minha configuração, mas tem um valor padrão, 1048576.
Quando descobri que essa configuração existia, defini-a como maior que meus arquivos e tudo está funcionando.
Aqui está a documentação link
se você comparar com a entrada acima SecRequestBodyLimit, a documentação parece muito complicada. O que eu consegui resumir é isso; Se você estiver enviando um anexo de arquivo real, a configuração anterior será a regra. Se você estiver colando o conteúdo de um arquivo em algo como um formulário e a carga estiver nas regras PUT, então, SecRequestBodyNoFilesLimit.
Você diz que isso é um serviço PHP, então isso significa que o php.ini é muito mais jogado do que o httpd.conf.
Existem vários limites de tamanho definidos no php.ini, incluindo limites no tamanho das solicitações, então eu começaria verificando se esses limites são grandes o suficiente para as suas necessidades.