J'ai un site Web qui utilise https pour transmettre un fichier javascript au client. Le site Web est getsimpleapps.com .
Il s'avère que ce fichier se charge 52 fois plus lentement avec https (20.08s - 29.08s) qu'avec http (380ms).
La page d'accueil du site partage la même lenteur que le fichier javacript.
Je suis récemment passé de dreamhost à linode, et j'ai piraté le fonctionnement de SSL sur le nouveau serveur jusqu'à ce qu'il le fasse. Je n'ai pas fait de configuration folle.
Le linode exécute Ubuntu 12.04 et le site est au sommet d'une pile (LAMP).
Ma question à la communauté de débordement de pile est la suivante: comment procéder pour corriger SSL et HTTPS sur mon serveur? Je sais que le débordement de pile est jonché de questions concernant la lenteur de HTTPS mais aucune vraie solution n'est donnée. Un tutoriel ubuntu ou un guide de configuration serait idéal.
fichier: /etc/apache2/sites-enabled/getsimpleapps.com
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName getsimpleapps.com
ServerAlias 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
ServerAdmin [email protected]
ServerName getsimpleapps.com
ServerAlias 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 à partir du poste de travail 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, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server 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
* Server certificate:
* subject: OU=Domain Control Validated; OU=Provided by New Dream Network, LLC; OU=DreamHost Basic SSL; CN=getsimpleapps.com
* start 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 verify ok.
> HEAD / HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.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
< Server: Apache/2.2.22 (Ubuntu)
Server: 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+%28universal-apple-darwin11.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+%28universal-apple-darwin11.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=/
< Vary: Accept-Encoding
Vary: 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 depuis le serveur linode (via ssh)
thomas@vannevar:~$ 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 verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server 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
* Server certificate:
* subject: OU=Domain Control Validated; OU=Provided by New Dream Network, LLC; OU=DreamHost Basic SSL; CN=getsimpleapps.com
* start 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 verify 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
< Server: Apache/2.2.22 (Ubuntu)
Server: 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
la source
"It turns out that this file is loading 52% slower with https (20.08s - 29.08s) that with http (380ms)."
- hein? Pouvez-vous vérifier vos unités et votre grammaire, s'il vous plaît. Cela n'a pas beaucoup de sens.Réponses:
J'ai eu le même problème, avec des différences de temps de réponse presque identiques entre HTTP et HTTPS. Il s'avère que le problème était comme dans la réponse de @htmltiger : Apache2 était simplement à court de processus de travail.
Cela provoque la mise en file d'attente de nouvelles demandes jusqu'à ce qu'un travailleur devienne libre et puisse traiter la suivante [ source ]. Je suppose que la raison pour laquelle cela n'affecte que HTTPS et pas également HTTPS est que presque tout votre trafic est sur HTTP et Apache donne aux requêtes HTTP et HTTPS la même priorité, en prenant une demande de chaque file d'attente à son tour. Ainsi, lorsque la file d'attente HTTPS est beaucoup plus longue, les demandes attendent beaucoup plus longtemps. En effet, il y a deux files d'attente, car la file d'attente est simplement le mécanisme de file d'attente de connexion TCP Linux, et Linux fournit une file d'attente par port.
Diagnostique
Si tel est votre problème, les symptômes suivants s'appliquent:
Le meilleur indicateur: sur votre serveur,
apachectl status
montre que tous les processus de travail autorisés sont en cours d'exécution. C'est le cas quand aucun point.
n'est affiché dans la ligne du tableau de bord du processus, ce qui indique qu'il ne reste "aucun emplacement ouvert sans processus en cours". La ligne pourrait ressembler à ceci par exemple:Vous voyez des messages comme celui-ci dans votre journal d'erreurs Apache2 principal (
/var/log/apache2/error.log
, pas ceux spécifiques au domaine):Il existe de nombreux processus dans votre backlog Apache. Selon cet article détaillé , vous pouvez le voir à partir de la
unacked:
valeur enss -lti '( sport = :https )'
sortie. Selon la version ou la configuration dess
, cette valeur peut être manquante.La plupart du retard (disons, 17 sur 20 s) est affiché dans la console réseau Firefox, dans l'onglet "Timings" de l'URL initiale demandée, comme "Blocking".
Solution
Cela suppose que vous utilisez le module serveur préfork MPM dans Apache. Il en est de même pour les modules MPM "événement" et "travailleur" - détails .
Modifiez
/etc/apache2/mods-enabled/mpm_prefork.conf
et augmentez leMaxRequestWorkers
paramètre.Si vous l'augmentez au-delà de la valeur par défaut de 256, vous devez également définir ServerLimit à la même valeur pour que votre modification soit effective.
Appliquez les modifications:
service apache2 reload
Assurez-vous dans la sortie du tableau de bord
apachectl status
que le nouveauMaxRequestWorkers
paramètre est effectif. Elle doit être équivalente à la longueur de la ligne du tableau de bord en caractères.Si le paramètre n'est pas encore effectif, recherchez les
/etc/apache2
anciennes directives de configuration (et leurs synonymes obsolètes encore plus anciens) qui pourraient remplacer votre modification:Diagnostics différentiels
Dans le cas où vous voyez HTTPS être beaucoup plus lent que HTTP mais pas à chaque fois dans une série de rechargements de page (juste en moyenne), alors vous pourriez avoir une variante de ce problème de fantaisie , avec deux serveurs Apache2 fonctionnant sur le port SSL 443.
la source
Essayez de changer le chiffrement en RC4-MD5 (bon équilibre entre performances et sécurité), c'est-à-dire:
À votre santé
la source
SSLProtocol all
?J'ai eu un problème similaire pour un serveur occupé mais l'augmentation de MaxRequestWorkers à 400 dans mpm_prefork.conf l'a corrigé.
la source
Il s'avère que mon problème était que mes clés provenaient d'un autre serveur. J'avais besoin d'obtenir un nouveau certificat et de le configurer avec de nouvelles clés.
la source