Como reescrever url com subdomínio em HAProxy

1

Quando o usuário solicita o link , eu preciso substituir o cabeçalho do nome do host dessa solicitação por example.com e reescrever o caminho para link . Tentei usar o reqrep, mas não consegui encontrar como adicionar a parte do subdomínio ao caminho.

reqirep ^Host:\ (.*[^\.])(\.example\.com)      Host:\ example.com
reqrep ^([^\ :]*)\ (.*) \ /???/

Eu encontrei o método% [req.hdr (host), inferior, campo (1, '.')] para obter o nome do subdomínio, mas não posso usá-lo na parte de substituição do método reqrep. Como posso usar variável nesta parte?

    
por Baran 17.11.2016 / 11:34

1 resposta

5

Capture o subdomínio em uma variável de solicitação chamada req.rewrite_example (que é um nome que acabei de inventar ... o req. é necessário, o resto pode ser o que você quiser) ... faça isso capturando o valor do cabeçalho Host: , convertendo-o para minúsculas e, em seguida, usando o conversor regsub() para eliminar o .example.com no final. Faça isso somente se o nome do host terminar com .example.com - caso contrário, a variável será indefinida e os testes -m found nas regras subseqüentes serão falsas e essas regras não serão disparadas (que é o que queremos, para qualquer outro nome de domínio pode ver).

http-request set-var(req.rewrite_example) req.hdr(host),lower,regsub(\.example\.com$,) if { hdr_end(host) -i .example.com }

Insira a variável capturada no início do caminho, se a variável estiver definida (o que deveria ser, se a primeira regra fosse uma correspondência).

http-request set-path /%[var(req.rewrite_example)]%[path] if { var(req.rewrite_example) -m found }

Substitua o cabeçalho Host: pela string literal example.com se a variável estiver definida.

http-request set-header Host example.com if { var(req.rewrite_example) -m found }

... envie um pedido ...

curl http://www.example.com/tacgnol.jpg

... e os seguintes cabeçalhos estão sendo enviados para o back-end:

GET /www/tacgnol.jpg HTTP/1.1
User-Agent: curl/7.35.0
Accept: */*
Host: example.com

Feito.

    
por 18.11.2016 / 04:32