我在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连接
答案 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文件是否是从自签名证书创建的?它是如何构建的?