2013-08-29 42 views
2

我试图通过https连接到2个后端服务器使用端口443,并且我想找到一种方法将密钥&证书文件发送到后端的服务器。我的haproxy.cfg是:Haproxy 1.4连接到https后端服务器

global 
    log 127.0.0.1 local0 
    log 127.0.0.1 local1 notice 
    #log loghost local0 info 
    maxconn 4096 
    #chroot /usr/share/haproxy 
    user haproxy 
    group haproxy 
    daemon 
    #debug 
    #quiet 

defaults 
    log  global 
    mode http 
    option httplog 
    option dontlognull 
    retries 3 
    option redispatch 
    maxconn 2000 
    contimeout 5000 
    clitimeout 50000 
    srvtimeout 50000 

listen stats :8000 
    #mode http 
    stats enable 
    stats realm Haproxy\ Statistics 
    stats uri/
    stats auth admin:password 


listen ssl-relay :80 
    mode tcp 
    balance roundrobin 
    stick-table type ip size 200m expire 30m 
    stick on src 
    server server01 www.example.com:443 check inter 2000 fall 3 
    server server02 www.example.com:443 check inter 2000 fall 3 

如何才能使haproxy服务器和后端服务器之间的通信安全?

回答

1

haproxy 1.4不支持SSL。要么更新到1.5,要么使用类似stunnel的东西。

我已经在一个非常大的企业实施中使用了这两种产品,并且效果很好。如果你想坚持使用haproxy 1.4,那么stunnel路线非常简单。只需在haproxy服务器上安装stunnel,在本地端口上侦听,让haproxy连接到本地端口,然后配置stunnel以指向远程https端点。除了在安全通道的全局设置,实际的配置是3线

  1. 监听本地主机
  2. 目标端口的主机和端口
2

将你的客户使用https://myfakepage.com:80的网址是什么?如果没有,那么你在做什么是毫无意义的。您正在处理与前端的未加密连接,然后与后端进行加密连接。问题是,当连接返回到客户端时,它将不加密,所以你不会购买任何东西。如果您的客户将使用https://pmyfakepage.com:80,那么无需执行任何操作,因为haproxy已经充当https流量的传递。

你试图做的负载平衡器SSL终止,如果是的话你倒着做

你绑定secion会看起来像

frontend ssl-site 
bind *:443 ssl crt /path/to/bundle.pem #you need to make sure the whole cert path is in one pem file 
reqadd X-Forwarded-Proto:\ https 
default_backend myServers 

backend myServers 
balance roundrobin 
server server1 www.example.com:80 
server server2 www2.example.com:80 

但dtorgo指出,SSL终止在这种方式只适用于1.5以上。如果您发现通道太慢,另一种选择是螺柱。

希望这可以解决你的问题。