
Estou usando o HAProxy para balancear a carga de alguns servidores web (modo HTTP). Os servidores web são estritamente dinâmicos, ou seja, não existe nenhum conteúdo estático, apenas serviços web.
Os 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 recebidas 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 Not Found on Accelerator
um erro, o que torna mais difícil identificar o 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 a solicitação do HAProxy para o web_server com o url_path?
Se o HAProxy receber como http://192.168.5.2:80/small
, envie a solicitação para o servidor da web comohttp://192.168.5.10:8080/small
Responder1
Como o seu caminho está contido no início do URL, por que não usar path_beg, o uso recomendado para path_end é para extensões de nome de arquivo.
acl is_small caminho_beg -i /small acl is_medium caminho_beg -i /medium acl is_large caminho_beg -i /large
Responder2
O caminho de uma solicitação HTTP ésempreentregue ao servidor back-end, ou seja
GET /small HTTP/1.1
ficará visível atrás do HAproxy apenas como essa solicitação. Se você suspeitar que isso de alguma forma está 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 GET
solicitações de entrada.
Estou me arriscando e presumo que você espera que o HAproxyinseriralgo na frente do URI, como
server web_1 192.168.5.14:8080/my/path check
transformaria uma solicitação /small
em uma solicitação para /my/path/small
. Isto pode ser conseguido usando a reqrep
opção, consulte odocumentaçãopara detalhes.