Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js HAProxy+;Nodejs+;SockJS+;Express+;SSL_Node.js_Ssl_Amazon Ec2 - Fatal编程技术网

Node.js HAProxy+;Nodejs+;SockJS+;Express+;SSL

Node.js HAProxy+;Nodejs+;SockJS+;Express+;SSL,node.js,ssl,amazon-ec2,Node.js,Ssl,Amazon Ec2,我在NodeJS中设置了一个服务器,如下图所示: 现在,我想做两件事,这两件事似乎可以通过HAProxy实现: 无论客户端希望访问哪个服务器,都只使用一个端口。我想对所有非SSL端口使用外部端口8080 交通。(所有SSL通信应使用端口443) 在SockJS服务器和Express服务器上启用SSL 请注意,我的所有服务器都在amazonec2上的同一个实例上运行。所以我想对交通进行内部布线 这是迄今为止我的haproxy.cfg: mode http # Set timeou

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

现在,我想做两件事,这两件事似乎可以通过HAProxy实现:

  • 无论客户端希望访问哪个服务器,都只使用一个端口。我想对所有非SSL端口使用外部端口
    8080
    交通。(所有SSL通信应使用端口443)

  • SockJS服务器
    Express服务器
    上启用SSL

  • 请注意,我的所有服务器都在
    amazonec2
    上的同一个实例上运行。所以我想对交通进行内部布线

    这是迄今为止我的
    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服务器(8080内部端口)


    有什么想法吗?

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

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


    你弄明白了吗?我知道Haproxy 1.5现在可以使用SSL,但我遇到了麻烦。我还可以要求您共享您的任何全局或默认设置。我正在使用Juju将Haproxy与Node.js应用程序一起部署,我很难找到一个好的方法。我可以将连接推送到HTTPS,但我无法保持足够长的连接时间,而且即使证书有效,证书也不好。只有当我直接访问服务器时,它才有效。
    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