HAPROXY
Configuração e Customização HAPROXY
2 Ways to Enable Sticky Sessions in HAProxy (Guide)
Link: https://www.haproxy.com/blog/enable-sticky-sessions-in-haproxy
HyperText Transfer Protocol (HTTP), the protocol that defines the language browsers use to communicate with web servers, is stateless, meaning that after you make a web request and a server sends back a response, no memory of that interaction remains. Websites need other ways to remember previous user interactions to make anything more sophisticated than a static web page work.
These days, Javascript frameworks like Vue.js, React.js, and others let developers create single-page applications (SPAs) that provide statefulness to the otherwise stateless web. Because they’re implemented as Javascript applications running in the user’s browser, they can keep track of what the user has done and render the app in a way that accounts for that shared history. However, the user’s browser
Nick creates technical content for HAProxy Technologies ranging from documentation and blog posts to Wikipedia articles, GitHub READMEs and Stack Overflow answers. With a background in web development and DevOps, he has fun digging into product features and discovering the optimal path for a new blog tutorial.
Related Posts
How to Enable Health Checks in HAProxy (Guide)
HAProxy provides three types of health checks: active health checks, passive health checks and agent health checks. In this blog, we will learn about each one.
2 Ways to Implement a Circuit Breaker in HAProxy (Guide)
In this blog post, you'll learn how to implement a circuit breaker with HAProxy in a simple and more complex way, that allows greater customization.
Load Balancing, Affinity, Persistence & Sticky Sessions
This blog post shows why and how to use a load balancer, the differences between Affinity, Persistence, and Sticky Sessions, and how to enable them in HAProxy.
Preserve Source IP Address Despite Reverse Proxies (Guide)
In this blog post, we aim to demonstrate how to preserve source IP addresses when using the reverse-proxy mode in HAProxy.
HAPROXY com persistência de URL
Informações geradas pelo ChatGPT.
Sim, é possível configurar o HAProxy para atender tanto HTTP (porta 80) quanto HTTPS (porta 443) ao mesmo tempo. Isso pode ser feito configurando dois frontends separados — um para HTTP e outro para HTTPS — e ambos encaminhando as requisições para o mesmo backend, de modo que o balanceamento de carga e a persistência por URL sejam aplicados de maneira uniforme para ambos os protocolos.
Exemplo de Configuração para HTTP e HTTPS ao Mesmo Tempo
Aqui está um exemplo de configuração onde o HAProxy aceita tráfego HTTP e HTTPS e roteia as requisições para o mesmo backend, mantendo a persistência baseada na URL para ambos os protocolos:
Explicação da Configuração:
Como Funciona:
Certificado SSL:
O caminho /etc/ssl/certs/meucertificado.pem
deve apontar para o certificado SSL e a chave privada do seu domínio. Se você estiver usando o Let's Encrypt ou outra autoridade certificadora (CA), basta colocar o arquivo .pem
correto que contenha o certificado público e a chave privada.
Caso você precise gerar um certificado SSL autoassinado, pode usar o seguinte comando openssl
:
Esse comando gera um certificado autoassinado, o que é útil para testes ou ambientes internos, mas para produção, recomenda-se o uso de um certificado de uma autoridade certificadora (CA) confiável.
Conclusão:
Se você deseja configurar o HAProxy para rotear tráfego em portas diferentes de 80 (HTTP) e 443 (HTTPS), o procedimento é semelhante, mas você deve ajustar a configuração de frontends e backends para escutar nas portas específicas que deseja utilizar.
A lógica de balanceamento de carga e persistência por URL será a mesma, mas em vez de usar as portas padrão (80 e 443), você configurará o HAProxy para escutar nas portas que você escolher.
Exemplo de Configuração para Portas Diferentes:
Vamos imaginar que você deseja usar as portas 8080 para HTTP e 8443 para HTTPS, em vez das portas padrão (80 e 443). A configuração seria:
Explicação das Modificações:
-
Frontend HTTP:
-
bind *:8080
: O HAProxy agora escuta na porta8080
para tráfego HTTP, em vez de80
. -
acl is_http_request path_reg ^/.*
: A regra ACL captura qualquer URL que for solicitada e a redireciona para o backend.
-
-
Frontend HTTPS:
-
bind *:8443 ssl crt /etc/ssl/certs/meucertificado.pem
: O HAProxy escuta na porta8443
para tráfego HTTPS e usa o certificado SSL localizado no caminho/etc/ssl/certs/meucertificado.pem
. O certificado SSL deve ser válido, seja autoassinado ou de uma autoridade certificadora.
-
-
Backend:
-
A configuração do backend permanece a mesma, com balanceamento de carga baseado em
roundrobin
, persistência por URL usandostick-table
, e a inserção do cookieSERVERID
para garantir a persistência.
-
-
Servidores Backend:
-
server server1 192.168.1.1:80 check
: Os servidores backend continuam sendo configurados na porta80
, porque o HAProxy irá fazer a terminação SSL para o tráfego HTTPS e, em seguida, encaminhá-lo para os servidores backend na porta80
.
-
Fluxo de Funcionamento:
1. Requisição HTTP (porta 8080):
-
O cliente acessa a URL
http://meusite.com:8080/pagina1
. -
O HAProxy recebe a requisição na porta
8080
, e com base no balanceamento de carga (roundrobin), encaminha a requisição para um dos servidores backend. -
O servidor que responder à primeira requisição para
/pagina1
será registrado no stick-table com a URL/pagina1
, garantindo que futuras requisições para essa URL sejam roteadas para o mesmo servidor.
2. Requisição HTTPS (porta 8443):
-
O cliente acessa a URL
https://meusite.com:8443/pagina1
. -
O HAProxy recebe a requisição na porta
8443
, faz a terminação SSL (descriptografa o tráfego HTTPS) e, em seguida, redireciona a requisição para os servidores backend na porta80
. -
O HAProxy verifica na stick-table qual servidor foi associado à URL
/pagina1
e direciona a requisição para o mesmo servidor que atendeu a primeira requisição.
3. Persistência para Todos os Usuários:
-
Independentemente de ser uma requisição HTTP ou HTTPS, a persistência será mantida para todos os usuários com base na URL, garantindo que a URL
/pagina1
seja sempre tratada pelo mesmo servidor.
Caso Você Queira Usar Portas Diferentes para Cada Backend:
Se você quiser que o tráfego seja roteado para diferentes portas nos servidores backend, você pode ajustar a configuração para cada servidor backend. Por exemplo, se você tiver servidores que escutam em portas diferentes, a configuração seria algo como:
Essa configuração faria com que cada servidor backend estivesse escutando em portas diferentes, mas o HAProxy ainda aplicaria a persistência e o balanceamento de carga.
Resumo:
-
Sim, é possível configurar o HAProxy para escutar em portas diferentes de 80 e 443 (por exemplo, 8080 para HTTP e 8443 para HTTPS).
-
A persistência de URL e o balanceamento de carga continuam funcionando da mesma forma, independentemente da porta que está sendo utilizada.
-
A configuração de terminação SSL no HAProxy permite que o tráfego HTTPS seja manipulado na porta
8443
e redirecionado para os servidores backend na porta80
(ou qualquer porta configurada).