Saya memiliki situs web yang menggunakan https untuk mengirimkan file javascript ke klien. Situs webnya adalah getsimpleapps.com .
Ternyata file ini memuat 52 kali lebih lambat dengan https (20.08s - 29.08s) dengan http (380ms).
Beranda situs berbagi lambatnya sama dengan file javacript.
Saya baru-baru ini beralih dari dreamhost ke linode, dan meretas untuk mendapatkan SSL agar dapat bekerja di server baru hingga berhasil. Saya tidak melakukan konfigurasi gila.
Linode menjalankan Ubuntu 12.04 dan situs berada di atas tumpukan (LAMP).
Pertanyaan saya kepada komunitas stack overflow adalah: Bagaimana cara saya memperbaiki SSL & HTTPS di server saya? Saya tahu bahwa stack overflow dipenuhi dengan pertanyaan mengenai lambatnya HTTPS tetapi tidak ada solusi nyata yang diberikan. Tutorial atau panduan konfigurasi ubuntu akan ideal.
file: /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>
Keriting dari workstation lokal
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 dari server 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
sumber
"It turns out that this file is loading 52% slower with https (20.08s - 29.08s) that with http (380ms)."
- ya Bisakah Anda memeriksa ulang unit Anda dan tata bahasa di sana? Itu tidak masuk akal.Jawaban:
Saya memiliki masalah yang sama, dengan perbedaan waktu respons yang hampir sama antara HTTP dan HTTPS. Ternyata masalahnya seperti dalam jawaban oleh @htmltiger : Apache2 hanya kehabisan proses pekerja.
Ini menyebabkan permintaan baru harus antri sampai seorang pekerja menjadi bebas dan dapat memproses [ sumber ] berikutnya. Saya kira alasan mengapa ini hanya mempengaruhi HTTPS dan tidak juga HTTPS adalah bahwa hampir semua traffic Anda melebihi HTTP dan Apache memberikan HTTP dan HTTPS permintaan prioritas yang sama, mengambil satu permintaan dari setiap antrian secara bergantian. Jadi ketika antrian HTTPS lebih lama, permintaan menunggu lebih lama. Memang ada dua antrian, karena antrian hanyalah mekanisme antrian koneksi Linux TCP, dan Linux menyediakan satu antrian per port.
Diagnostik
Jika ini masalah Anda, gejala berikut akan berlaku:
Indikator terbaik: di server Anda,
apachectl status
menunjukkan bahwa semua proses pekerja yang diizinkan berjalan. Ini adalah kasus ketika tidak ada titik.
shwon di garis papan skor proses, menunjukkan tidak ada "slot terbuka tanpa proses saat ini" tersisa. Baris mungkin terlihat seperti ini misalnya:Anda melihat pesan seperti ini di log kesalahan utama Apache2 Anda (
/var/log/apache2/error.log
, bukan yang spesifik domain):Ada banyak proses dalam tumpukan Apache Anda. Menurut artikel mendalam ini , Anda bisa melihatnya dari
unacked:
nilaiss -lti '( sport = :https )'
output. Tergantung pada versi atau konfigurasiss
, nilai itu mungkin hilang.Sebagian besar penundaan (misalnya, 17 dari 20 detik) ditampilkan di Firefox Network Console, di tab "Timing" untuk URL awal yang diminta, sebagai "Blocking".
Larutan
Ini mengasumsikan Anda menggunakan modul server prefork MPM di Apache. Ini serupa untuk modul MPM "event" dan "worker" - detail .
Edit
/etc/apache2/mods-enabled/mpm_prefork.conf
dan tambahMaxRequestWorkers
pengaturan.Jika Anda meningkatkannya di luar standar 256, Anda juga harus mengatur ServerLimit ke nilai yang sama untuk membuat perubahan Anda efektif.
Terapkan perubahan:
service apache2 reload
Pastikan dalam keluaran papan skor
apachectl status
bahwaMaxRequestWorkers
pengaturan baru efektif. Itu harus setara dengan panjang garis papan skor dalam karakter.Jika pengaturannya belum efektif, cari
/etc/apache2
arahan konfigurasi lama (dan sinonim usang yang bahkan lebih lama) yang dapat menimpa perubahan Anda:Diagnosis Banding
Jika Anda melihat HTTPS jauh lebih lambat daripada HTTP tetapi tidak setiap saat dalam serangkaian reload halaman (hanya rata-rata), maka Anda mungkin memiliki varian masalah mewah ini , dengan dua server Apache2 berjalan pada port SSL 443.
sumber
Coba ubah cipher ke RC4-MD5 (keseimbangan kinerja dan keamanan yang baik), yaitu:
Bersulang
sumber
SSLProtocol all
?Saya memiliki masalah serupa untuk server yang sibuk tetapi meningkatkan MaxRequestWorkers menjadi 400 di mpm_prefork.conf memperbaikinya.
sumber
Ternyata masalah saya adalah kunci saya berasal dari server lain. Saya perlu mendapatkan sertifikat baru dan mengaturnya dengan kunci baru.
sumber