How to rewrite domain.com to www.domain.com with HAProxy?
Asked Answered
W

2

13

We have 1 loadbalancer with 3 members behind it:

main balancer: www.website.com members: web1.website.com, web2.website.com and web3.website.com

Currently we are using nginx on the loadbalancer, but we want to replace it with HAProxy.

Nginx rewrites the domain without www (domain.com) to www.domain.com with the following line:

server {
    server_name domain.com;
    listen 1.2.3.4:80;

    rewrite ^(.*) http://www.domain.com$1 permanent;
}

How can I manage this with HAproxy?

My haproxy config:

frontend http 1.2.3.4:80

    default_backend www_cluster
    acl is_www hdr_end(host) -i www.domain.com
    use_backend www_cluster if is_www


backend www_cluster

    balance roundrobin
    cookie SERVERID insert nocache indirect

    option httpchk HEAD / HTTP/1.0
    option httpclose
    option forwardfor

    server web1 1.2.3.5:82 cookie WEB1 check
    server web2 1.2.3.6:82 cookie WEB2 check
    server web3 1.2.3.7:82 cookie WEB3 check

TIA!

Wateriness answered 3/10, 2013 at 10:21 Comment(0)
B
26

Revise the frontend block:

frontend http 1.2.3.4:80
    default_backend www_cluster
    redirect prefix http://www.mydomain.com code 301 if { hdr(host) -i domain.com }

Source:

  1. Haproxy redirect www to non-www
  2. HAProxy 1.4 Manual
  3. Personal experience
Buskin answered 7/11, 2013 at 2:37 Comment(1)
How to I hide index.php from url on haproxyFornix
D
6

The HAProxy Configuration Manual answers this directly:

Example:

Append 'www.' prefix in front of all hosts not having it

http-request redirect code 301 location      \
  http://www.%[hdr(host)]%[capture.req.uri]  \
  unless { hdr_beg(host) -i www }

It's under the redirect entry:

Detest answered 17/6, 2016 at 9:3 Comment(2)
This will redirect blog.example.com to www.blog.example.com. Does anyone know how to avoid this?Syneresis
I guess you can use unless { hdr_beg(host) -i www } OR unless { hdr_beg(host) -i blog}Shwa

© 2022 - 2024 — McMap. All rights reserved.