Posso estar enganado, mas os documentos do Apache 2.4 sobre mod_reqtimeout e as funcionalidades principais não explicam como as diretivas RequestReadTimeout
e Timeout
interagem entre si: uma tem precedência sobre a outra ou ambas se aplicam?
Como não consegui encontrar resposta para essa pergunta, decidi descobrir à moda antiga: experimentando.
$ time telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
real 0m51.744s
user 0m0.001s
sys 0m0.005s
E, bem, isso foi inesperado, porque minha configuração atual parece contar uma história diferente:
$ sudo apache2ctl -DDUMP_CONFIG | grep -i time
Timeout 300
KeepAliveTimeout 5
# In file: /etc/apache2/mods-enabled/reqtimeout.conf
RequestReadTimeout header=20-40,minrate=500
RequestReadTimeout body=10,minrate=500
Então, não apenas não encontrei a resposta para minha pergunta inicial, mas outra apareceu: de onde realmente vem esse tempo limite de 51 segundos? Não é a Timeout
diretiva que o especifica, nem os tempos limite relativos aos estágios do cabeçalho ou do corpo da RequestReadTimeout
diretiva.
Espere, poderia ser... veja isso: body=10, e o máximo do cabeçalho é 40, e 10+40 = 50 que é próximo o suficiente de 51 (latência e outras coisas). Não faz muito sentido porque, pelo que entendi, o tempo limite do corpo deve entrar em vigor somente depois que os cabeçalhos forem totalmente recebidos (certo?). Mas nunca se sabe, vamos ver.
$ sudo apache2ctl -DDUMP_CONFIG | grep -i time
Timeout 300
KeepAliveTimeout 5
# In file: /etc/apache2/mods-enabled/reqtimeout.conf
RequestReadTimeout header=20-30,minrate=500
RequestReadTimeout body=1,minrate=500
Então agora devo ver um tempo limite de aproximadamente 31 segundos, se a hipótese estiver correta. Certo?
Bem...
$ time telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
real 0m51.567s
user 0m0.001s
sys 0m0.005s
Suponho que isso prova que a hipótese está errada.
E assim fico com duas perguntas sem resposta: como as diretivas RequestReadTimeout
e Timeout
interagem e por que meu apache atinge o tempo limite inesperadamente?
POR FALAR NISSO:
$ apache2 -v
Server version: Apache/2.4.58 (Ubuntu)
Server built: 2024-04-18T15:13:41