【问题标题】:Decoupling SSL load from a curl client将 SSL 负载与 curl 客户端分离
【发布时间】:2012-06-29 12:18:56
【问题描述】:

我有一个同步器进程,它对 Twitter、Facebook 等进行 curl HTTPS 调用,为我们的用户收集数据并更新数据库(存储在本地文件系统中)。在同一系统上运行着一个 HTTP 服务器,它查询这个 db 并在请求时将结果返回给用户。

问题在于,由于调用 Twitter、Facebook 等 API 时发生 SSL 协商,sycer 进程占用了过多的 CPU/IO。这使用户体验有点慢。所以我希望这个 SSL 协商发生在另一个运行 HTTP 服务器的系统上。而且我不能把同步器进程带到外面,因为它需要本地文件系统访问来更新数据库。

所以我正在考虑构建一种代理服务器。同步器进程将对代理服务器进行 HTTP 调用。代理服务器将对 Twitter、Facebook 等进行 HTTPS 调用,并将结果返回给同步器进程。

是否有任何软件为此而存在?如果已经有东西,我不想重新发明轮子。

【问题讨论】:

    标签: ssl proxy


    【解决方案1】:

    Stunnel 几乎完全符合您的要求,如果满足以下条件。

    • 必须为每个服务运行一个 stunnel 实例(从 inetd 或在独立的类似守护进程的模式下)。
    • 运行 cURL 的系统必须手动将目标服务的主机名解析为运行 stunnel 的主机的 IP 地址(例如/etc/hosts)才能使用它。

    我以类似的方式使用 stunnel 连接到使用 SSL 和支持 SSL 的客户端的 IRC 服务器。它就像一种魅力,需要注意的重要一点是 3.x 和更新版本之间的不兼容。如果您正在计划一个新系统,您可能应该使用新系统。

    【讨论】:

      【解决方案2】:

      我最终使用 nodejs 编写了一个简单的代理服务器。需要调用 HTTPS api 的客户端会将 JSON 格式的所有详细信息传递给此代理服务器。该代理服务器会依次调用 HTTPS api 并将结果返回给客户端。

      【讨论】:

        猜你喜欢
        • 2014-06-25
        • 2014-11-13
        • 1970-01-01
        • 2015-08-07
        • 1970-01-01
        • 2022-01-17
        • 2011-12-30
        相关资源
        最近更新 更多