John
John

Reputation: 353

Haproxy redirecting

I have a Haproxy to redirect from https://sede.example.com.br to https://sede.example.pub. The problem the Haproxy configuration is not following the redirection.

If I test with the curl command passing -L argument (follow redirects), it works fine

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

But I need to work without the -L option, because and have an API system that make some Post and Get operation and doesn't follow redirection. So I need do that in the Haproxy.

The configuration:

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

Any ideia in my configuration?

Upvotes: 0

Views: 1427

Answers (1)

Aleksandar
Aleksandar

Reputation: 2652

Well you can try the following snipplet, it's untested but I hope you get the idea

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

Upvotes: 1

Related Questions