【问题标题】:HAProxy + Nodejs + SockJS + Express + SSLHAProxy + Nodejs + SockJS + Express + SSL
【发布时间】:2013-12-10 11:41:47
【问题描述】:

我在 NodeJS 中设置了一个服务器,如下图所示:

现在我想做两件事,HAProxy 似乎可以做到:

  1. 无论客户端想要访问什么服务器,都只使用一个端口。我想为所有非 SSL 使用外部端口 8080 交通。 (所有 SSL 流量都应使用端口 443)

  2. SockJS ServerExpress Server 上启用 SSL。

请注意,我的所有服务器都在 amazon ec2 上的同一实例上运行。所以我想在内部路由流量。

到目前为止,这是我的haproxy.cfg

    mode http
    # Set timeouts to your needs
    timeout client  10s
    timeout connect 10s
    timeout server  10s

frontend all 0.0.0.0:8080
    mode http
    timeout client 120s

    option forwardfor
    # Fake connection:close, required in this setup.
    option http-server-close
    option http-pretend-keepalive

    acl is_sockjs path_beg /echo /broadcast /close
    acl is_stats  path_beg /stats

    use_backend sockjs if is_sockjs
    use_backend stats if is_stats
    default_backend express


backend sockjs
    # Load-balance according to hash created from first two
    # directories in url path. For example requests going to /1/
    # should be handled by single server (assuming resource prefix is
    # one-level deep, like "/echo").
    balance uri depth 2
    timeout server  120s
    server srv_sockjs1 127.0.0.1:8081

backend express
    balance roundrobin
    server srv_static 127.0.0.1:8008

backend stats
    stats uri /stats
    stats enable

不知道如何将 SSL 和流量路由到 TCP Server(8080 内部端口)

有什么想法吗?

【问题讨论】:

  • 你发现了吗?我知道 Haproxy 1.5 现在可以使用 SSL,但我遇到了麻烦。我也可以请您分享您的任何全局或默认设置。我正在使用 Juju 将 Haproxy 与 Node.js 应用程序一起部署,并且很难找到一种好的方法。我能够将连接推送到 HTTPS,但我无法保持连接足够长的时间,即使证书有效,证书也不好。只有当我直接访问服务器时才有效。

标签: node.js ssl amazon-ec2


【解决方案1】:

您的设置有点难以理解(对我来说)。如果我正确理解您的目标,您希望通过 SSL 提供 Web 服务,因此端口 443。从 443 连接到端口 8080(内部)。如果是这种情况,那么以下配置可能就是您正在寻找的。它并没有真正使用端口 8080,而是直接连接到您的 express 后端。您实际上不需要暴露端口 8080(除非您有特殊原因这样做),因为您可以直接在前端部分中使用后端服务器。

请注意,这只适用于 HAProxy 1.5+,如果您使用的是旧版本的 HAProxy,您应该在 SSL 连接到达 HAProxy 之前放置一些东西来隧道化(但我强烈建议 1.5,因为它使您的设置不那么复杂)

frontend ssl
    bind *:443 ssl crt /path/to/cert.pem ca-file  /path/to/cert.pem
    timeout client 120s

    option forwardfor
    # Fake connection:close, required in this setup.
    option http-server-close
    option http-pretend-keepalive

    acl is_sockjs path_beg /echo /broadcast /close
    acl is_stats  path_beg /stats

    use_backend sockjs if is_sockjs
    use_backend stats if is_stats
    default_backend express

【讨论】:

    猜你喜欢
    • 2013-09-03
    • 2016-12-17
    • 2018-09-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2018-09-15
    • 2013-01-18
    相关资源
    最近更新 更多