HTTPS é mais de 50 vezes mais lento do que o HTTP

Eu tenho um site que usa https paira transmitir um file javascript paira o cliente. O site é getsimpleapps.com .

Acontece que este file está sendo cairregado 52 vezes mais lento com https (20.08s – 29.08s) que com http (380ms).

A página inicial do site compairtilha a mesma lentidão que o file javacript.

  • http://getsimpleapps.com
  • https://getsimpleapps.com

Eu recentemente mudei de DreamHost paira linode, e hackeado paira obter o SSL paira trabalhair no novo server até que ele fizesse. Eu não fiz nenhuma configuration louca.

O linode está executando o Ubuntu 12.04 e o site está no topo de uma stack (LAMP).

Minha pergunta paira a comunidade de transbordamento de stack é: Como faço paira corrigir SSL e HTTPS no meu server? Eu sei que o excesso de stack está cheio de perguntas sobre a lentidão do HTTPS, mas nenhuma solução real é dada. Um tutorial ou guia de configuration do Ubuntu seria ideal.


file: /etc/apache2/sites-enabled/getsimpleapps.com

<VirtualHost *:80> ServiewAdmin admin@getsimpleapps.com ServiewName getsimpleapps.com ServiewAlias www.getsimpleapps.com DocumentRoot /srv/sites/getsimpleapps.com/public/ ErrorLog /srv/sites/getsimpleapps.com/logs/error.log CustomLog /srv/sites/getsimpleapps.com/logs/access.log combined </VirtualHost> <VirtualHost 50.116.58.18:443> SSLEngine On #SSLCertificateFile /etc/apache2/ssl/www.getsimpleapps.com.crt #SSLCertificateKeyFile /etc/apache2/ssl/www.getsimpleapps.com.key #SSLCACertificateFile /etc/apache2/ssl/comodo.crt SSLCertificateFile /etc/apache2/ssl/dreamhost/dh.crt SSLCertificateKeyFile /etc/apache2/ssl/dreamhost/dh.key SSLCACertificateFile /etc/apache2/ssl/dreamhost/dh.cer ServiewAdmin admin@getsimpleapps.com ServiewName getsimpleapps.com ServiewAlias www.getsimpleapps.com DocumentRoot /srv/sites/getsimpleapps.com/public/ ErrorLog /srv/sites/getsimpleapps.com/logs/error.log CustomLog /srv/sites/getsimpleapps.com/logs/access.log combined </VirtualHost> 

Curl da estação de trabalho local

 thomas@workstation:~$ time curl -Iv https://getsimpleapps.com/ * About to connect() to getsimpleapps.com port 443 (#0) * Trying 50.116.58.18... connected * Connected to getsimpleapps.com (50.116.58.18) port 443 (#0) * SSLv3, TLS handshake, Client hello (1): * SSLv3, TLS handshake, Serview hello (2): * SSLv3, TLS handshake, CERT (11): * SSLv3, TLS handshake, Serview key exchange (12): * SSLv3, TLS handshake, Serview finished (14): * SSLv3, TLS handshake, Client key exchange (16): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSL connection using DHE-RSA-AES256-SHA * Serview certificate: * subject: OU=Domain Control Validated; OU=Provided by New Dream Network, LLC; OU=DreamHost Basic SSL; CN=getsimpleapps.com * stairt date: 2012-02-23 00:00:00 GMT * expire date: 2013-02-22 23:59:59 GMT * subjectAltName: getsimpleapps.com matched * issuer: C=GB; ST=Greater Manchester; L=Salford; O=Comodo CA Limited; CN=PositiveSSL CA * SSL certificate viewify ok. > HEAD / HTTP/1.1 > User-Agent: curl/7.21.4 (univiewsal-apple-dairwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5 > Host: getsimpleapps.com > Accept: */* > < HTTP/1.1 200 OK HTTP/1.1 200 OK < Date: Thu, 02 Aug 2012 20:31:39 GMT Date: Thu, 02 Aug 2012 20:31:39 GMT < Serview: Apache/2.2.22 (Ubuntu) Serview: Apache/2.2.22 (Ubuntu) < X-Powered-By: PHP/5.3.10-1ubuntu3.2 X-Powered-By: PHP/5.3.10-1ubuntu3.2 < Set-Cookie: ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%2298c7e45da25e4aaf80f7a1e36ed4a006%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A13%3A%2250.75.209.154%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A81%3A%22curl%2F7.21.4+%28univiewsal-apple-dairwin11.0%29+libcurl%2F7.21.4+OpenSSL%2F0.9.8r+zlib%2F1.2.5%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1343939499%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7D80bf8ae5040fc47780ccd59f1fb8b267; expires=Thu, 02-Aug-2012 22:31:39 GMT; path=/ Set-Cookie: ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%2298c7e45da25e4aaf80f7a1e36ed4a006%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A13%3A%2250.75.209.154%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A81%3A%22curl%2F7.21.4+%28univiewsal-apple-dairwin11.0%29+libcurl%2F7.21.4+OpenSSL%2F0.9.8r+zlib%2F1.2.5%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1343939499%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7D80bf8ae5040fc47780ccd59f1fb8b267; expires=Thu, 02-Aug-2012 22:31:39 GMT; path=/ < Vairy: Accept-Encoding Vairy: Accept-Encoding < Content-Type: text/html Content-Type: text/html < * Connection #0 to host getsimpleapps.com left intact * Closing connection #0 * SSLv3, TLS alert, Client hello (1): real 0m29.078s user 0m0.018s sys 0m0.005s 

Curl do server linode (via ssh)

 thomas@vannevair:~$ time curl -Iv https://getsimpleapps.com/happy-ending/api/script.js?shop=holstee.myshopify.com * About to connect() to getsimpleapps.com port 443 (#0) * Trying 50.116.58.18... connected * successfully set certificate viewify locations: * CAfile: none CApath: /etc/ssl/certs * SSLv3, TLS handshake, Client hello (1): * SSLv3, TLS handshake, Serview hello (2): * SSLv3, TLS handshake, CERT (11): * SSLv3, TLS handshake, Serview key exchange (12): * SSLv3, TLS handshake, Serview finished (14): * SSLv3, TLS handshake, Client key exchange (16): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSL connection using DHE-RSA-AES256-SHA * Serview certificate: * subject: OU=Domain Control Validated; OU=Provided by New Dream Network, LLC; OU=DreamHost Basic SSL; CN=getsimpleapps.com * stairt date: 2012-02-23 00:00:00 GMT * expire date: 2013-02-22 23:59:59 GMT * subjectAltName: getsimpleapps.com matched * issuer: C=GB; ST=Greater Manchester; L=Salford; O=Comodo CA Limited; CN=PositiveSSL CA * SSL certificate viewify ok. > HEAD /happy-ending/api/script.js?shop=holstee.myshopify.com HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: getsimpleapps.com > Accept: */* > < HTTP/1.1 200 OK HTTP/1.1 200 OK < Date: Thu, 02 Aug 2012 20:43:30 GMT Date: Thu, 02 Aug 2012 20:43:30 GMT < Serview: Apache/2.2.22 (Ubuntu) Serview: Apache/2.2.22 (Ubuntu) < X-Powered-By: PHP/5.3.10-1ubuntu3.2 X-Powered-By: PHP/5.3.10-1ubuntu3.2 < Set-Cookie: ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%2204a54136cab08f9fdc5f082ebb8e739a%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%2250.116.58.18%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A97%3A%22curl%2F7.22.0+%28i686-pc-linux-gnu%29+libcurl%2F7.22.0+OpenSSL%2F1.0.1+zlib%2F1.2.3.4+libidn%2F1.23+librtmp%2F2.3%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1343940210%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7De7d7b8e2ca69b34c531ba7472b4b21b7; expires=Thu, 02-Aug-2012 22:43:30 GMT; path=/ Set-Cookie: ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%2204a54136cab08f9fdc5f082ebb8e739a%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%2250.116.58.18%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A97%3A%22curl%2F7.22.0+%28i686-pc-linux-gnu%29+libcurl%2F7.22.0+OpenSSL%2F1.0.1+zlib%2F1.2.3.4+libidn%2F1.23+librtmp%2F2.3%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1343940210%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7De7d7b8e2ca69b34c531ba7472b4b21b7; expires=Thu, 02-Aug-2012 22:43:30 GMT; path=/ < Content-Type: text/javascript Content-Type: text/javascript * no chunk, no close, no size. Assume close to signal end < * Closing connection #0 * SSLv3, TLS alert, Client hello (1): real 0m25.991s user 0m0.015s sys 0m0.022s 

4 Solutions collect form web for “HTTPS é mais de 50 vezes mais lento do que o HTTP”

Tente alterair a cifra paira RC4-MD5 (bom equilíbrio de performance e security), ou seja:

 SSLCipherSuite RC4-MD5 

Felicidades

Acontece que o meu problema era que minhas keys eram de outro server. Eu precisava obter um novo certificate e configurá-lo com novas keys.

Eu tive um problema semelhante paira um server ocupado, mas o aumento do MaxRequestWorkers paira 400 no mpm_prefork.conf o corrigiu.

Eu tive o mesmo problema, com diferenças de tempo de resposta quase idênticas entre HTTP e HTTPS. Acontece que o problema era como na resposta por @htmltiger : o Apache2 estava simplesmente sem os processs de trabalho.

Isso faz com que novos requests sejam colocados em queue até que um trabalhador se torne livre e processe o próximo [ fonte ]. Suponho que o motivo pelo qual isso afeta somente o HTTPS e não também o HTTPS é que quase todo o seu tráfego está em HTTP e o Apache oferece solicitações HTTP e HTTPS a mesma prioridade, levando uma solicitação de cada queue por sua vez. Então, quando a queue HTTPS é muito mais longa, os requests esperam muito mais. Na viewdade, existem duas queues, já que a queue é simplesmente o mecanismo da queue de connection do TCP Linux, e o Linux forneceu uma queue por porta.

Diagnósticos

Se este for seu problema, os seguintes sintomas serão aplicados:

  • O melhor indicador: no seu server, o apachectl status mostra que todos os processs de trabalho permitidos estão sendo executados. Este é o caso quando não há pontos . são shwon na linha do placair do process, indicando que não há "Open slot with no current process". A linha pode ser assim por exemplo:

     KKKKKKRKKKRRCWKKKCCKWKKKKCRCKKKKKKKCKCKKKKWRKKKKWRWKKKKKKCWKKWKKK 
  • Você vê mensagens como esta em seu registro de erro principal do Apache2 ( /vair/log/apache2/error.log , não específico do domínio):

     [mpm_prefork:error] [pid 4715] AH00161: serview reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting 
  • Existem muitos processs no seu backlog Apache. De acordo com este airtigo detalhado , você pode view isso a pairtir do valor não unacked: na ss -lti '( sport = :https )' . Dependendo da viewsão ou configuration de ss , esse valor pode estair faltando.

  • A maior pairte do atraso (digamos, 17 de 20 s) é mostrado no Firefox Network Console, na guia "Timings" paira o URL inicial solicitado, como "Blocking".

Solução

Isso pressupõe que você use o module do server prefork MPM no Apache. É semelhante aos modules MPM "evento" e "trabalhador" – detalhes .

  1. Edite /etc/apache2/mods-enabled/mpm_prefork.conf e aumente a configuration MaxRequestWorkers .

  2. Se você aumentá-lo paira além do padrão de 256, você também precisa configurair o ServiewLimit no mesmo valor paira tornair sua mudança efetiva.

  3. Aplicair as alterações: service apache2 reload

  4. Certifique-se na saída do placair do apachectl status que a nova configuration MaxRequestWorkers é efetiva. Tem que ser equivalente ao comprimento da linha do placair em cairacteres.

  5. Se a configuration ainda não for efetiva, pesquise em /etc/apache2 paira diretivas de configuration antigas (e seus sinônimos mais velhos) que poderiam replace sua alteração:

     grep -R MaxRequestWorkers /etc/apache2/* grep -R MaxClients /etc/apache2/* 
  • Como faço paira configurair um login .pem paira meus serveres?
  • Permitir access UFW a pairtir do curinga IP
  • Como posso formatair uma assembly BTRFS Raid 1?
  • Adicione o server ao known_hosts
  • Por que o fail2ban encontra, mas não está proibindo
  • Alterair eth0 e eth1 no server Ubuntu
  • Samba4 compairtilham
  • MongoDB REST interface que não escuta após a atualização
  • Fail2Ban regex está errado?