Tempo limite do Apache causado por getimagesize do PHP em https. Funciona bem em http

1

Parece que o PHP getimagesize () está causando alguns problemas no apache em https. O que acontece é que quando eu chamo isso de https, há um atraso igual à configuração de tempo limite no arquivo conf do apache antes que a página seja carregada. Por exemplo, se eu definir o valor de tempo limite do apache para 12 segundos, a chamada será interrompida por 12 segundos antes de ser executada. Se eu acessar o mesmo script sobre http, tudo funciona bem. Eu escrevi um pouco de código de depuração abaixo:

<?php
echo "The start time is " . date("h:i:sa");
echo "<br>";
$img_url = url()."/assets/img/logo/45.jpg";
    print $img_url;
echo "<br>";
echo "The time before getimagesize() is " . date("h:i:sa");
echo "<br>";
    $img_dimen = getimagesize($img_url);
    print_r($img_dimen);
echo "<br>";
echo "The time after getimagesize() is " . date("h:i:sa");
echo "<br>";

function url(){
    return sprintf(
        "%s://%s%s",
        isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
        $_SERVER['SERVER_NAME'],
    dirname($_SERVER['REQUEST_URI'])
);
}
?>

A saída em https é:

The start time is 07:02:17pm
https://myserver.mydomain.com/assets/img/logo/45.jpg
The time before getimagesize() is 07:02:17pm
Array ( [0] => 226 [1] => 78 [2] => 2 [3] => width="226" height="78" [bits] => 8 [channels] => 3 [mime] => image/jpeg ) 
The time after getimagesize() is 07:02:30pm

Como pode ser visto, leva 13 segundos para completar a chamada getimagesize ().

A saída por http é:

The start time is 07:05:30pm
https://myserver.mydomain.com/assets/img/logo/45.jpg
The time before getimagesize() is 07:05:30pm
Array ( [0] => 226 [1] => 78 [2] => 2 [3] => width="226" height="78" [bits] => 8 [channels] => 3 [mime] => image/jpeg ) 
The time after getimagesize() is 07:05:30pm

O tempo limite no apache.conf é definido como 12. Se eu alterar esse valor de tempo limite, o tempo gasto em https será alterado de acordo. O tamanho da imagem é de apenas 32 KB.

Meu vhost se parece com:

<VirtualHost *:443>
ServerName myserver.mydomain.com
ServerAlias myserver.mydomain.com
DirectoryIndex index.php
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /root/apache-keys/mycert.crt
SSLCertificateKeyFile /root/apache-keys/mykey.key
SSLCertificateChainFile /root/apache-keys/mybundle.crt
<Directory "/var/www/html">
   Options FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>
</VirtualHost>

O arquivo vhost conf contém uma seção para *: 80 com os mesmos detalhes do acima. Existem outros sites (diferentes vhosts para diferentes subdomínios) hospedados neste servidor. O vhost para cada um segue o mesmo padrão que este (*: 443, *: 80) e todos eles estão em arquivos .conf diferentes. A maioria deles possui certificados autoassinados, enquanto um deles compartilha o certificado com este site (o certificado é um certificado curinga). Mudar o certificado para um auto-assinado também não ajudou. Nem desativou o outro site que compartilha o mesmo certificado.

O error.log mostra o abaixo para alguns dos outros sites:

[Wed Jan 03 08:07:03.067875 2018] [ssl:warn] [pid 1328] AH01909: RSA certificate configured for othersite1.mydomain.com:443 does NOT include an ID which matches the server name
[Wed Jan 03 08:07:03.068056 2018] [ssl:warn] [pid 1328] AH01909: RSA certificate configured for othersite2.mydomain.com:443 does NOT include an ID which matches the server name

Além do acima, não há outros erros no error.log.

Eu verifiquei o site em ssllabs.com e não há problemas com os certificados.

A saída do apache2ctl -S mostra que este site é o servidor padrão para a porta 80 e a porta 443. Eu tentei desabilitar todos os outros sites e isso ocorre.

Mais alguns detalhes: A versão do Apache é 2.4.7. Versão do PHP é 5.6.30 OS é o Ubuntu 14.04

Qualquer ajuda é muito apreciada. Por favor, deixe-me saber se alguma informação adicional é necessária. Eu realmente gostaria de saber por que getimagesize causa um tempo limite do apache antes de retornar os dados por https.

    
por Yamraj 04.01.2018 / 18:43

0 respostas