使用大型POST主体

时间:2016-05-05 21:14:59

标签: ssl https haproxy tls1.2

我在ubuntu盒子上运行了3个nodejs web-servers,并在同一个盒子上对这些服务器进行负载均衡。 HAproxy侦听端口80(http)和443(https,SSL终止)。 HAproxy服务器和Web服务器之间没有SSL。

对没有SSL的api之一的POST调用会传递任何content-length值,但是当我尝试在HAproxy上使用SSL连接(port443)进行内容长度大于8055的POST调用时,HAproxy超时给出504网关超时错误。

另外,如果我给出"期望:100继续" curl命令的标题,服务器响应一些延迟,我不想存在。以下是HAproxy配置文件的样子:

global
    stats socket /var/run/haproxy.sock mode 0777
    log  127.0.0.1  local0 info
    log  127.0.0.1  local1 info
    chroot   /usr/share/haproxy
    uid  nobody
    gid  nobody
    nbproc 1
    daemon  
    maxconn 50000

frontend localnodes:https
    bind *:443 ssl crt /etc/ssl/private/443_private_ssl_in.pem no-sslv3
    mode http
    reqadd X-Forwarded-Proto:\ https
    default_backend nodes
    timeout client 30000

frontend localnodes-http
    bind *:80
    mode http
    reqadd X-Forwarded-Proto:\ http
    default_backend nodes
    timeout client 30000

backend nodes
    mode http
    balance roundrobin
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    option httpchk HEAD / HTTP/1.1\r\nHost:localhost
    log global
    timeout connect 3000
    timeout server 30000
    option httplog
    option ssl-hello-chk

    option httpchk GET /

    http-check expect status 404
    server nodejsweb01 127.0.0.1:8000 check  
    server nodejsweb02 127.0.0.1:8001 check 
    server nodejsweb03 127.0.0.1:8002 check

我确保后面的nodejs web-servers没有问题,它们工作正常。我试过增加超时服务器'期间,没有效果。 还尝试了this link上的解决方案,该解决方案告诉我们为后端节点提供一个选项ssl ca-file,如下所示:

server nodejsweb01 127.0.0.1:8000 ssl ca-file /etc/ssl/certs/ca.pem check
server nodejsweb02 127.0.0.1:8001 ssl ca-file /etc/ssl/certs/ca.pem check
server nodejsweb03 127.0.0.1:8002 ssl ca-file /etc/ssl/certs/ca.pem check

但在此选项之后,HAproxy会抛出一个错误,指出后端没有可用的服务器。

请告诉我在HAproxy conf文件中我做错了什么,以便让网络服务器成功响应SSL连接

1 个答案:

答案 0 :(得分:0)

尝试此最低配置:

frontend localnodes
    bind *:80 
    bind *:443 ssl crt /etc/ssl/private/443_private_ssl_in.pem
    mode http
    default_backend nodes

backend nodes
    mode http
    option forwardfor
    option httplog

    server nodejsweb01 127.0.0.1:8000 check  
    server nodejsweb02 127.0.0.1:8001 check 
    server nodejsweb03 127.0.0.1:8002 check

我怀疑它是那些额外的选择。

它也可以是SSL证书文件。您的PEM文件是否是从自签名证书创建的?它是如何构建的?