HTTPSはHTTPの50倍以上遅い


8

httpsを使用してJavaScriptファイルをクライアントに送信するWebサイトがあります。ウェブサイトはgetsimpleapps.comです。

このファイルは、https(20.08s-29.08s)の方がhttp(380ms)の場合より52倍遅く読み込まれています。

サイトのホームページは、javacriptファイルと同じ低速性を共有しています。

私は最近ドリームホストからlinodeに切り替え、SSLが機能するまで新しいサーバーでSSLを機能させることにハッキングしました。クレイジーな設定はしていません。

linodeはUbuntu 12.04を実行しており、サイトは(LAMP)スタックの上にあります。

スタックオーバーフローコミュニティに対する私の質問は、次のとおりです。サーバーでSSLおよびHTTPSを修正するにはどうすればよいですか?スタックオーバーフローがHTTPS遅さに関する質問でいっぱいであることは知っていますが、実際の解決策はありません。ubuntuチュートリアルまたは構成ガイドが理想的です。


ファイル:/etc/apache2/sites-enabled/getsimpleapps.com

<VirtualHost *:80>
     ServerAdmin admin@getsimpleapps.com
     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 admin@getsimpleapps.com
     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>

ローカルワークステーションからのカール

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

LinodeサーバーからのCurl(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

1
"It turns out that this file is loading 52% slower with https (20.08s - 29.08s) that with http (380ms)."-え?そこでユニットと文法を再確認してください。それはあまり意味がありません。
MDMarra 2012

1
OPは53 遅いことを意味すると思います。HTTPSの読み込みが非常に遅い。

たぶん、virtualminをドロップして、すべてを設定できるようにするだけかもしれません。
アンドリュー・スミス

1
うーん。これは間違っています。スローダウンがどこにあるかを示している可能性があるApacheログに何かありますか?私のサーバーでは、HTTPSで263ms、HTTPで84msかかります。あなたが見ている非常に大きな違いは、他の何かによるものです。
cjc 2012

1
Apacheの設定を貼り付けてください。
マイケルハンプトン

回答:


3

同じ問題がありましたが、HTTPとHTTPSの応答時間の違いはほぼ同じです。この問題は、@ htmltiger回答と同様に判明しました。Apache2は単にワーカープロセスを使い果たしていました。

これにより、ワーカーが解放されて次の[ ソース ]を処理できるようになるまで、新しいリクエストがキューに入れられます。これがHTTPSにのみ影響し、HTTPSにも影響しない理由は、ほぼすべてのトラフィックがHTTP経由であり、ApacheがHTTPおよびHTTPSリクエストに同じ優先度を与え、各キューから1つのリクエストを順番に取得するためです。したがって、HTTPSキューがはるかに長い場合、リクエストははるかに長く待機します。キューは単なるLinux TCP接続キューメカニズムであり、Linuxはポートごとに1つのキューを提供するため、実際には2つのキューがあります。

診断

これが問題である場合は、次の症状が発生します。

  • 最良の指標:サーバー上で、apachectl status許容されるすべてのワーカープロセスが実行されていることを示します。これは、.プロセススコアボードの行にドットが表示されない場合で、「現在のプロセスのないオープンスロット」が残っていないことを示します。たとえば、行は次のようになります。

    KKKKKKRKKKRRCWKKKCCKWKKKKCRCKKKKKKKCKCKKKKWRKKKKWRWKKKKKKCWKKWKKK
    
  • メインのApache2エラーログにこのようなメッセージが表示されます(/var/log/apache2/error.logドメイン固有のものではありません)。

    [mpm_prefork:error] [pid 4715] AH00161: server reached MaxRequestWorkers 
        setting, consider raising the MaxRequestWorkers setting
    
  • Apacheバックログには多くのプロセスがあります。この詳細な記事によるとunacked:ss -lti '( sport = :https )'出力の値からこれを確認できます。のバージョンまたは設定によってはss、その値が欠落している場合があります。

  • ほとんどの遅延(たとえば20秒のうち17秒)は、Firefoxネットワークコンソールの[タイミング]タブで、要求された初期URLの[ブロック]として表示されます。

解決

これは、Apacheでprefork MPMサーバーモジュールを使用することを前提としています。「イベント」と「ワーカー」のMPMモジュールも同様です– 詳細

  1. 設定を編集/etc/apache2/mods-enabled/mpm_prefork.confして増やしMaxRequestWorkersます。

  2. デフォルトの256を超えて増やす場合は、ServerLimitを同じ値に設定して、変更を有効にする必要があります。

  3. 変更を適用します。 service apache2 reload

  4. スコアボードの出力でapachectl status、新しいMaxRequestWorkers設定が有効であることを確認してください。これは、スコアボードの行の長さと同じにする必要があります。

  5. 設定がまだ有効でない場合は/etc/apache2、変更を上書きする可能性のある古い構成ディレクティブ(および古い非推奨の同義語)を検索してください。

    grep -R MaxRequestWorkers /etc/apache2/*
    grep -R MaxClients /etc/apache2/*
    

鑑別診断

HTTPSがHTTPよりもはるかに低速であるが、一連のページのリロードのたびに(平均して)毎回ではない場合、SSLポート443で2つのApache2サーバーが実行されているこの奇妙な問題の変種がある可能性があります。


0

暗号をRC4-MD5(パフォーマンスとセキュリティのバランスが良い)に変更してみてください。

SSLCipherSuite RC4-MD5

乾杯


2
報告されているHTTPとHTTPSの違いは、暗号の選択によるものではありません。それは他のいくつかの設定ミスです。
cjc 2012

@cjcそれが違いを生むかどうかを確認したいのですが...試すのに害はありません。
HTTP500、2012

@ HTTP500はこれをhttpd.confに入れますか?どうSSLProtocol allですか?
ThomasReggi 2012

@ ThomasReggi、SSLEngineオンラインの下に置くだけです。私はお勧めします:SSLProtocol all -SSLv2
HTTP500

何?!今ははるかに高速です。私はapache2を再起動しませんでしたが大丈夫ですか?
ThomasReggi 2012

0

忙しいサーバーでも同様の問題がありましたが、mpm_prefork.confでMaxRequestWorkersを400に増やして修正しました。


-1

私の問題は、私のキーが別のサーバーのものであることがわかりました。新しい証明書を取得して、新しいキーで設定する必要がありました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.