从一个星期前开始,我开始注意到我的web应用程序的糟糕performance。
我的应用程序在Amazon EC2 m1.large实例上提供。
只有4-5kb的静态文件通常需要超过10秒才能收到。 这会间歇性地发生,但是对于每一个页面加载,我可以预期至less有一两个特定资源的等待时间。
从检查Firebug很显然,抢劫处于请求的“等待”部分。 (DNS /连接/发送和接收总是很好)
不幸的是,我还没有发布图片所需的信誉,或者我会。
更糟糕的是,当一个页面请求大量的静态资源,比如Images时,几乎每一个请求都会出现这个问题。
玩过我的NGINX和PHP-FPMconfiguration后,在上个星期左右,我才发现只有在通过HTTPS访问服务器时,问题才出现。
使用ab命令testing性能时可以看到这一点。
HTTPS:
ab -c 100 -n 3000 https://www.mydomain.com/ Server Port: 443 SSL/TLS Protocol: TLSv1,RC4-SHA,2048,128 Document Path: / Document Length: 13367 bytes Concurrency Level: 100 Time taken for tests: 12.122 seconds Complete requests: 3000 Failed requests: 0 Write errors: 0 Total transferred: 41205000 bytes HTML transferred: 40101000 bytes Requests per second: 247.48 [#/sec] (mean) Time per request: 404.067 [ms] (mean) Time per request: 4.041 [ms] (mean, across all concurrent requests) Transfer rate: 3319.52 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 13 219 91.2 216 577 Processing: 18 178 83.5 166 562 Waiting: 10 168 80.5 156 549 Total: 60 397 124.9 386 809
HTTP:
ab -c 100 -n 3000 http://www.mydomain.com/ Server Port: 80 Document Path: / Document Length: 184 bytes Concurrency Level: 100 Time taken for tests: 0.468 seconds Complete requests: 3000 Failed requests: 0 Write errors: 0 Non-2xx responses: 3000 Total transferred: 1431000 bytes HTML transferred: 552000 bytes Requests per second: 6404.06 [#/sec] (mean) Time per request: 15.615 [ms] (mean) Time per request: 0.156 [ms] (mean, across all concurrent requests) Transfer rate: 2983.14 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 3 7 2.2 8 11 Processing: 2 8 2.4 7 18 Waiting: 1 6 2.0 6 16 Total: 11 15 1.4 15 28
在诊断这类问题方面,我很缺乏经验,而且我很可能误读了上述工具的输出。 无论如何,尽pipe谷歌search量巨大,我仍然不知道从哪里开始。
我的nginx.conf的相关部分:
#SSL certs ssl on; ssl_certificate /etc/ssl/certs/mycert.crt; ssl_certificate_key /etc/ssl/certs/mycert.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_prefer_server_ciphers on;
首先,我想知道,如果我认为是SSL / HTTPS导致问题,我似乎是在正确的轨道上。 其次,对于如何纠正这个问题,有什么build议?
直到最近,完全相同的configuration完美地工作,所以我真的不知道发生了什么。
提前谢谢了。
ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
您需要删除条目
ECDHE-RSA-AES256-SHA384
这使得椭圆曲线Diffie-Helman短暂密码可以代替它
!kEDH
除非你需要完美的前向保密,否则这是不必要的,并且是你所要求的长时间延迟的原因。 对于大多数应用来说,高密码入口应该是完全合理的。
*快速编辑:您可以查看使用openssl命令行实用程序正在协商的密码:
openssl s_client -host HOSTNAME -port 443
使用您正在查看的服务器的IP或域名replace主机名。 如果在这些更改之前在“密码”行中看到“DHE-RSA-AES256-SHA”,那么这很可能是问题所在。