ruby-on-rails - EC2 中的 SSL 缓慢

标签 ruby-on-rails ssl amazon-ec2 nginx amazon-web-services

我们已经将 Rails 应用程序部署到 EC2。在我们的设置中,我们在循环 DNS 后面的小实例上有两个代理。它们运行 nginx 负载均衡器,用于动态增长和缩小的 Web 服务器群。每个 Web 服务器还运行带有杂种集群的 nginx。这里的 nginx 负责静态内容和负载平衡杂种。

无论如何,我们的流量基本上是 HTTPS。我们有 2 个代理负责 SSL。我注意到我们在这些实例上的网络吞吐量上限仅为 60 Mbps 左右。相比之下,在测试中,我能够通过常规 HTTP 在小型实例上持续获得 700+ Mbps。事实上,这与我在大型实例上可以获得的结果相同。类似于 Right Scale 家伙在 their testing 中得到的结果. (亚马逊说小的获得“中等”网络 I/O,而大的获得“高”。如果我不得不推测,我认为这只是他们说每个物理盒子有更多小实例共享一个网卡的方式.我不确定这是否意味着大型获得专用网络接口(interface),但我对此表示怀疑。)

在测试中,我能够让一个大型实例获得大约 250 Mbps 的 SSL。这告诉我 CPU 或其他资源是瓶颈。但是,我们的监控图并未显示代理上的 CPU 特别繁忙。

我的问题是:

  1. 我关于 SSL 变慢的直觉是不是由于 CPU 正确而我们的监控图表是错误的?还是其他一些资源可能是限制因素?
  2. 我们是否应该只承担额外费用并将代理放在高 CPU 实例上?还是只添加更多小实例会更好?
  3. 我们应该将 SSL 终止卸载到网络服务器吗?但是,这又引入了一个问题:我们如何在应用程序中获取客户端 IP 地址?现在我们的代理将它设置在 X-FORWARDED-FOR header 中,但显然如果它不解密 SSL,这是不可能的。

我很想听听任何类似的设置。我们对他们的 Elastic Load Balancer 进行了一些修改,但我认为这基本上使我们处于与上面 #3 相同的情况。有没有其他人转而使用 ELB 并发现它值得?

最佳答案

您是否正在使用 nginx 提供的 SSL session 缓存?这可以帮助 nginx 节省不断重新制定加密的周期。参见 http://wiki.nginx.org/NginxHttpSslModule#ssl_session_cache

您使用什么监控来确定您的 CPU 使用率? SSL 通常非常占用 CPU。

我会将 SSL 代理保留为指定层,这样您就可以将协商 ssl 的成本与其他问题分开。

关于ruby-on-rails - EC2 中的 SSL 缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1726990/

相关文章:

ruby-on-rails - Rails 视频上传

javascript - 通过 js.erb 文件渲染 Flash 信息

java - 如何通过 HTTP 代理连接 SSL 套接字?

java - 用于相互认证的 keystore /信任库中必须包含什么?

python - 收集包元数据 (repodata.json) :/Killed

jquery-fileupload-rails - 损坏的形式

ruby-on-rails - Rails 命名范围不适用于关联

java - keystore 中的 SSL 证书不起作用

linux - 在 SSH 到 EC2 实例期间权限被拒绝(公钥)

amazon-ec2 - 不同的 .ebextensions 取决于环境