由于无法使用 ELB,我正在 AWS 环境中设置 HAproxy LB。这是迫使我选择 HAproxy 路线的要求:一台服务器上将运行多个网站。网站需要通过 https 运行。网站代码需要 https 连接才能访问它。如果 http 代码到达它,它会重定向。所以我必须将每个网站绑定到一个唯一的 IP 并在那里进行 SSL 终止。
这就是我现在正在做的事情:
2 个子网:
HAproxy 子网是公共的,而 Webserver 子网是私有的
来自 Web 服务器的所有流量都被路由到运行 HAproxy 的实例。为了进行测试,我刚刚向 HAproxy 添加了一个站点。我首先在 HAproxy 上终止连接,解密它,读取主机值,然后根据该值将其重定向到该网站通过 https 在 Web 服务器上映射的 IP。这是现有配置:
frontend https_traffic
bind 10.100.210.229:443 ssl crt /ssl/converted.pem
log global
option tcplog
option dontlognull
timeout client 30s
use_backend secure_traffic1 if { hdr(host) -i work.xyzsite.net }
backend secure_traffic1
balance roundrobin
retries 2
stick-table type binary len 32 size 30k expire 30m
stick on ssl_fc_session_id
timeout connect 5s
timeout server 5s
option ssl-hello-chk
server web1 10.100.10.16:443 ssl verify none
当我打开 URL 时,大多数时候我的浏览器中都会出现“ERR_EMPTY_RESPONSE”,而其他时候网站加载正常。我将 haproxy 日志级别设置为调试,但在日志中没有看到任何错误。
请帮忙。
答案1
我建议先验证您的证书。您可以对每个网站进行 curl 来验证证书是否按预期工作吗?
以下是一个运行的示例:
`curl --url 'https://yoursite.com/index.php' -v --cacert ./ca.pem`
输出将验证正在进行的连接和证书。