Haproxy 重定向

Haproxy redirecting

我有一个 Haproxy 可以从 https://sede.example.com.br to https://sede.example.pub 重定向。 Haproxy配置不跟随重定向的问题

如果我使用传递 -L 参数的 curl 命令进行测试(跟随重定向),它工作正常

curl -L https://sede.example.com.br

但我需要在没有 -L 选项的情况下工作,因为并且有一个 API 系统可以进行一些 Post 和 Get 操作并且不遵循重定向。所以我需要在 Haproxy 中这样做。

配置:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL). This list is from:
    #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    # An alternative list with additional directives can be obtained from
    #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
    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-bind-options no-sslv3

defaults
    log global
    mode    http
    option  httplog
    option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

frontend http-in
        option httplog
        bind *:80
        bind *:443 ssl crt /usr/local/etc/haproxy/haproxy.cfg/certs/
        timeout http-request 60s
        timeout http-keep-alive 4s
        acl https ssl_fc
        http-request set-header         X-Forwarded-Proto http if !https
        http-request set-header         X-Forwarded-Proto https if https

        stats uri /haproxy?examplehaproxystats74581257445
        log-format %{+Q}o\ %{-Q}ci\ -\ -\ [%T]\ %r\ %ST\ %B\ \"\"\ \"\"\ %cp\ %ms\ %ft\ %b\ %s\ \%Tq\ $

        acl sede_acl req.hdr(host) -i -m str sede.example.com.br
        redirect code 301 prefix https://sede.example.pub if sede_acl

我的配置有什么想法吗?

你可以试试下面的代码片段,它未经测试,但我希望你能理解

frontend http-in
    option httplog
    bind *:80
    bind *:443 ssl crt /usr/local/etc/haproxy/haproxy.cfg/certs/
    timeout http-request 60s
    timeout http-keep-alive 4s
    acl https ssl_fc
    http-request set-header         X-Forwarded-Proto http if !https
    http-request set-header         X-Forwarded-Proto https if https

    stats uri /haproxy?examplehaproxystats74581257445
    log-format %{+Q}o\ %{-Q}ci\ -\ -\ [%T]\ %r\ %ST\ %B\ \"\"\ \"\"\ %cp\ %ms\ %ft\ %b\ %s\ \%Tq\ $

    acl sede_acl req.hdr(host) -i -m str sede.example.com.br
    # redirect code 301 prefix https://sede.example.pub if sede_acl
    use_backend sede_acl if sede_acl
  
backend sede_acl
  http-request set-header Host sede.example.pub
  server sede-server sede.example.pub:443 sni sede.example.pub ssl