如果后端关闭,haproxy https 重定向循环

如果后端关闭,haproxy https 重定向循环

此 haproxy 配置终止 2 个站点(foo 和 bar)的 SSL,并将两个站点的负载平衡到它们自己的后端集群。它还将 http 请求重定向到 https。

效果很好。只是,如果后端关闭,它会进入两个站点的重定向循环。例如:https://foo.example.com->https://foo.example.com

如果我删除重定向。它通过 http 和 https 为网站提供服务,当后端关闭时,它会像我预期的那样提供 503 页面。

我想将 http 重定向到 https。那么,为什么会出现重定向循环?

global
    log 127.0.0.1   local0 debug
    maxconn 1024
    chroot /var/haproxy
    uid 604
    gid 604
    daemon
    pidfile /var/run/haproxy.pid

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    option  http-server-close
    option  redispatch
    retries 3
    maxconn 2000
    errorfile 503 /etc/haproxy/503.http

frontend http
    bind *:80
    redirect scheme https code 301 if !{ ssl_fc }

frontend https
    bind *:443 ssl crt /etc/ssl/example.com.pem

    option forwardfor
    reqadd X-Forwarded-Proto:\ https
    http-response set-header Strict-Transport-Security "max-age=31536000;"

    acl project_foo hdr(host) -i foo.example.com
    acl project_bar hdr(host) -i bar.example.com

    use_backend cluster_foo if project_foo
    use_backend cluster_bar if project_bar

backend cluster_foo
    server foo-1 foo-1.example.com:80 check

backend cluster_bar
    server bar-1 bar-1.example.com:80 check

```

答案1

测试时,haproxy 和 nginx 位于同一台服务器上。foo-1.example.com 在专用 IP 上监听 80 端口,而 haproxy 监听 *:80

让 haproxy 在专用 IP 上监听解决了这个问题。所以,上面的配置没问题。我花时间重新测试了所有内容,因为我确实简化了配置以获得合理的可重现设置

相关内容