Eu tenho uma nova configuração do Apache2 rodando no Debian 9 (armbian no NanoPi M4). Tudo funciona bem até eu tentar baixar um arquivo grande por HTTPS . Arquivos pequenos são baixados com sucesso, no entanto, os maiores parecem falhar aleatoriamente em algum momento.
Não consigo reproduzir esse problema com HTTP simples . Exemplo em wget
(mesmo comportamento em um navegador):
wget https://xyz---/test.bin --no-check-certificate
--2019-01-13 18:22:22-- https://xyz---/test.bin
Resolving xyz--- (xyz---)... 85.241.xxx.xxx
Connecting to xyz--- (xyz---)|85.241.xxx.xxx|:443... connected.
WARNING: cannot verify xyz---'s certificate, issued by 'CN=Let\'s Encrypt Authority X3,O=Let\'s Encrypt,C=US':
Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 200 OK
Length: 1073741824 (1,0G) [application/octet-stream]
Saving to: 'test.bin.2'
test.bin.2 39%[==================> ] 403,66M 11,6MB/s eta 54s
Estava baixando bem até chegar a 403,66M, depois desse ponto nada mais aconteceu. No lado do servidor ( error.log
) recebo isso:
ssl_engine_io.c(2135): [client 85.243.xxx.xxx:59904] OpenSSL: write 16413/16413 bytes to BIO#5588cd8c50 [mem: 5588a87c23] (BIO dump follows)
core_filters.c(525): [client 85.243.xxx.xxx:59904] core_output_filter: flushing because of THRESHOLD_MAX_BUFFER
core_filters.c(547): (70007)The timeout specified has expired: [client 85.243.xxx.xxx:59904] core_output_filter: writing data to the network
ssl_engine_io.c(2144): [client 85.243.xxx.xxx:59904] OpenSSL: I/O error, 16413 bytes expected to write on BIO#5588cd8c50 [mem: 5588a87c23]
(70007)The timeout specified has expired: [client 85.243.xxx.xxx:59904] AH01993: SSL output filter write failed.
Parece executar o core_output_filter: flushing because of THRESHOLD_MAX_BUFFER
e, em seguida, nada mais acontece. Às vezes eu também notei este erro:
ssl_engine_io.c(2135): [client 95.239.xxx.xxx:9937] OpenSSL: write 45/45 bytes to BIO#55bd9e23e0 [mem: 55bd9ec213] (BIO dump follows)
ssl_engine_io.c(2144): [client 95.239.xxx.xxx:9937] OpenSSL: I/O error, 5 bytes expected to read on BIO#55bd9e9d80 [mem: 55bd9ec213]
Aqui está a configuração dos VHosts que atendem a essas solicitações:
<VirtualHost *:443>
ServerName xyz---
ServerAdmin tcb13---
DocumentRoot /test
ErrorLog /test/error.log
CustomLog /test/access.log combined
SSLEngine on
SSLCertificateFile /mnt/SU1/letsencrypt/config/live/xyz---/fullchain.pem
SSLCertificateKeyFile /mnt/SU1/letsencrypt/config/live/xyz---/privkey.pem
Header always set Strict-Transport-Security "max-age=15768000"
LogLevel trace6
</VirtualHost>
Tenho certeza de que isso não é um problema relacionado à rede porque:
- Só acontece com SSL habilitado, em vhosts não-ssl consigo baixar sem problemas;
- Outros protocolos (FTP e SCP) funcionam bem para baixar o mesmo arquivo de teste;
- Sem problemas ao testar a rede com iperf3.
Algumas informações do sistema :
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.6 (stretch)
Release: 9.6
Codename: stretch
uname -a
Linux testxyz 4.4.162-rk3399 #41 SMP Fri Oct 26 14:03:47 CEST 2018 aarch64 GNU/Linux
apache2ctl -V | grep -i "Server version"
Server version: Apache/2.4.25 (Debian)
root@testxyz:~# dpkg -l |grep apache2
ii apache2 2.4.25-3+deb9u6 arm64 Apache HTTP Server
ii apache2-bin 2.4.25-3+deb9u6 arm64 Apache HTTP Server (modules and other binary files)
ii apache2-data 2.4.25-3+deb9u6 all Apache HTTP Server (common files)
ii apache2-utils 2.4.25-3+deb9u6 arm64 Apache HTTP Server (utility programs for web servers)
ii libapache2-mod-php7.3 7.3.0-2+0~20181217092659.24+stretch~1.gbp54e52f arm64 server-side, HTML-embedded scripting language (Apache 2 module)
Como posso consertar isso? Obrigada.
Eu consigo descobrir que este problema está relacionado à Ethernet integrada e problemas conhecidos com a CPU RK3399 . Com um adaptador USB 3 para Ethernet, esse problema não acontecerá.
Uma solução fácil para isso é desabilitar o descarregamento:
Você pode verificar o status de descarregamento posteriormente com
ethtool --show-offload eth0
. Depois de desativar os recursos de descarregamento, não tenho mais o problema relatado.Para sobreviver a reinicializações (e reinicializações de rede), você pode criar um script
/etc/network/if-up.d/disable-offload
semelhante a:(Certifique-se de NÃO nomear o arquivo com .sh e chmod +x este arquivo também)