在EC2上使用Nginx的SSL终止性能

我正在运行一个nginx实例,它充当EC2虚拟服务器上的SSL端点和基本负载平衡器,并且看到来自上游源的SSL页面的性能很差。

EC2实例是一个c1.medium,应该能够维持合理的吞吐量,但是我不能每秒超过60个事务。

服务于nginx状态页直接离开服务器,我pipe理的吞吐量是十倍以上,所以它不是纯粹的SSL开销,但是如果我重新configuration它服务相同的内容没有SSL我也做的更好,所以它也不是上游高架。 当CPU每秒处理60个事务时,CPU 已经最大化了。

我正在使用ab来testing它,参数为“-n 1000 -c 50 -k” – 1000个命中,并发度为50,启用了keepalives,以便SSL会话caching应该可以工作。

这是一个简短的configuration:

user www-data; worker_processes 4; pid /var/run/nginx.pid; events { worker_connections 4096; } http { sendfile off; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/json; log_format standard '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'; access_log /var/log/nginx/access.log standard; error_log /var/log/nginx/error.log; gzip on; gzip_types text/plain application/json; gzip_comp_level 1; upstream test { server 10.226.31.66; } server { listen 443; ssl on; ssl_certificate /etc/nginx/certs/both.crt; ssl_certificate_key /etc/nginx/certs/https.key; ssl_session_timeout 10m; ssl_session_cache shared:SSL:10m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!kEDH:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; location /v1/system/nginx { stub_status on; allow all; } location /nginx_status { stub_status on; allow all; } location / { proxy_pass http://test; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_buffering on; proxy_connect_timeout 15; proxy_intercept_errors on; } } } 

我发现,HTTP以500点/秒(带宽有限)和HTTPS几乎不能pipe理10(CPU有限)。 我没有这样的解决scheme,但作为一个可以有很多好处和很less缺点的解决方法,您是否考虑过使用亚马逊的弹性负载平衡器来终止SSL? 他们似乎快得多,只需要几个便宜的 ,比购买更多的实例,至less由于CPU短缺便宜。