我们在 Azure 的负载均衡器产品后面使用 2 个活动的 haproxy 服务器,然后将负载分配到我们的前端 Web 集群。我们有这个设置是因为我们需要在我们的 haproxy 服务器上使用 HA,并且我们还在 haproxy 中使用了许多规则来路由任何 Azure 产品都不支持的流量。
我们遇到了一个问题,流量到达 azure 负载均衡器,被路由到 haproxy 框,然后发送到 IIS 进行处理,但我们从未收到服务器返回的响应,但我可以看到请求已被处理,因为数据有已写入数据库。我在 504 的 haproxy 日志中有一个日志,但是当我检查 IIS 日志时,没有注册任何内容,因此它在 IIS 中得到处理,但看起来连接在某个阶段断开了。
我在没有 Azure 负载均衡器的情况下测试了这个设置,只有 Haproxy 可以正常工作,但是当我们引入 Azure 负载均衡器时,我们开始出现 504 错误。有没有人见过这样的问题?
haproxy.cfg
global
log 127.0.0.1 local0
maxconn 4096
user haproxy
group haproxy
tune.ssl.default-dh-param 2048
tune.maxrewrite 4096
ssl-default-bind-options no-sslv3
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-server-options no-sslv3
ssl-default-server-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
defaults
log global
option httplog
mode http
option dontlognull
option tcplog
retries 3
option redispatch
maxconn 20000
timeout connect 8000
timeout client 50000
timeout server 50000
frontend release-micro-http
bind :8082
reqadd X-Forwarded-Proto:\ http
default_backend release-micro-backend
backend release-micro-backend
balance roundrobin
option http-server-close
option forwardfor
option httpchk GET /check.txt
server worker1 10.1.2.1:8086 check
server worker2 10.1.2.2:8086 check