Como seu caminho está contido no início da URL, por que não usar path_beg, o uso recomendado para path_end é para extensões de nome de arquivo.
acl is_small path_beg -i /small acl is_medium path_beg -i /medium acl is_large path_beg -i /large
Estou usando o HAProxy para balanceamento de carga de alguns servidores da Web (modo HTTP). Os servidores da Web são estritamente dinâmicos, ou seja, não há conteúdo estático, apenas serviços da Web.
As URLs do tipo (análogo)
http://192.168.5.10:8080/small
http://192.168.5.10:8080/medium
http://192.168.5.10:8080/large
Agora, quando configuro o HAProxy para encaminhar as solicitações de entrada para esses 3 urls em algumas máquinas, estou especificando o url_path usando acl
e path_end
/ path_beg
, mas ao fazer a solicitação, recebo% erroNot Found on Accelerator
, o que dificulta a identificação do problema.
Abaixo está a configuração que estou usando. Além disso, não está registrando nenhum erro.
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 10000
srvtimeout 10000
frontend http_proxy
bind 192.168.5.9:8888
acl is_small path_end -i small
acl is_medium path_end -i medium
acl is_large path_end -i large
use_backend web_server_small if is_small
use_backend web_server_medium if is_medium
use_backend web_server_large if is_large
backend web_server_small
mode http
balance roundrobin
option httpclose
server web_1 192.168.5.10:8080 check
server web_2 192.168.5.11:8080 check
backend web_server_medium
mode http
balance roundrobin
option httpclose
server web_1 192.168.5.12:8080 check
server web_2 192.168.5.13:8080 check
backend web_server_large
mode http
balance roundrobin
option httpclose
server web_1 192.168.5.14:8080 check
server web_2 192.168.5.15:8080 check
É possível enviar o pedido do HAProxy para o web_server com o url_path?.
Se o HAProxy o receber como http://192.168.5.2:80/small
, envie a solicitação para o servidor da Web como http://192.168.5.10:8080/small
Como seu caminho está contido no início da URL, por que não usar path_beg, o uso recomendado para path_end é para extensões de nome de arquivo.
acl is_small path_beg -i /small acl is_medium path_beg -i /medium acl is_large path_beg -i /large
O caminho de uma solicitação HTTP é sempre entregue ao servidor de back-end, por exemplo
GET /small HTTP/1.1
será visível por trás do HAproxy como apenas esse pedido. Se você suspeitar que isso de alguma forma é truncado para
GET / HTTP/1.1
no servidor por trás do HAproxy, você deve verificar isso usando
tcpdump -i any port 8080 -As1024 | grep GET
nesse servidor e observe as solicitações GET
de entrada.
Estou indo em um membro e suponho que você espera que o HAproxy insira algo na frente do URI, como
server web_1 192.168.5.14:8080/my/path check
transformaria uma solicitação para /small
em uma solicitação para /my/path/small
. Isto pode ser conseguido usando a opção reqrep
, veja a documentação para detalhes.
Tags load-balancing haproxy