Um colega observou recentemente que, enquanto minha última postagem deu uma explicação válida de como um 408 poderia ter uma associação com uma medida de segurança, ele não ofereceu solução.
O registro de acesso canalizado é minha solução pessoal.
O seguinte deve funcionar de imediato na maioria das configurações do Ubuntu e com um mínimo de ajustes em outras configurações do Apache. Eu escolhi o PHP porque é o mais fácil de entender. Existem dois scripts: o primeiro impede que um 408 seja gravado no seu log de acesso. O segundo script envia todos os 408s para um arquivo de log separado. De qualquer forma, o resultado não é mais 408s no seu log de acesso. É sua escolha qual script implementar.
Use seu editor de texto favorito, eu uso o nano. Abra o arquivo em que você tem suas diretivas 'LogFormat' e 'CustomLog'. Comente os originais com o # habitual e adicione o seguinte. Você pode encontrar essas diretivas no arquivo abaixo.
sudo nano / etc / apache2 / sites-available / default
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" AccessLogPipe
CustomLog "|/var/log/apache2/PipedAccessLog.php" AccessLogPipe env=!dontlog
NOTA: Não registro imagens no meu registro de acesso. No meu arquivo etc / apache2 / httpd.conf, incluo a linha
SetEnvIfNoCase Request_URI ".(gif)|(jpg)|(png)|(css)|(js)|(ico)$" dontlog
Se isso não lhe interessar, remova-o env=!dontlog
da CustomLog
diretiva.
Agora crie um dos seguintes scripts PHP ( #!/usr/bin/php
é uma referência ao local do intérprete, verifique se o local está correto para o seu sistema - você pode fazer isso digitando no prompt $; whereis php
- isso deve retornar algo como php: /usr/bin/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
. pode ver #!/usr/bin/php
é o certo para a minha configuração).
sudo nano /var/log/apache2/PipedAccessLog.php
#!/usr/bin/php
<?php
$file = '/var/log/apache2/access.log';
$no408 = '"-" 408 0 "-" "-"';
$stdin = fopen ('php://stdin', 'r');
ob_implicit_flush (true);
while ($line = fgets ($stdin)) {
if($line != "") {
if(stristr($line,$no408,true) == "") {
file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
}
}
}
?>
sudo nano /var/log/apache2/PipedAccessLog.php
#!/usr/bin/php
<?php
$file = '/var/log/apache2/access.log';
$file408 = '/var/log/apache2/408.log';
$no408 = '"-" 408 0 "-" "-"';
$stdin = fopen ('php://stdin', 'r');
ob_implicit_flush (true);
while ($line = fgets ($stdin)) {
if($line != "") {
if(stristr($line,$no408,true) != "") {
file_put_contents($file408, $line, FILE_APPEND | LOCK_EX);
}
else {
file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
}
}
}
?>
Tendo salvo o PipedAccessLog.php
script; verifique se o root possui propriedade executando o seguinte no prompt $.
sudo chown -R root:adm /var/log/apache2/PipedAccessLog.php
O PipedAccessLog.php
script precisará de permissões de leitura / gravação e execução; portanto, execute o seguinte no prompt $.
sudo chmod 755 /var/log/apache2/PipedAccessLog.php
Finalmente, para que tudo funcione, você precisa reiniciar o serviço Apache. Execute o seguinte no prompt $.
sudo service apache2 restart
Se os logs do Apache estiverem em outro local, altere os caminhos para se adequar à sua configuração. Boa sorte.