Problema de configuração do balanceador do mod_proxy do Apache com a solicitação POST

1

Estou tentando configurar um balanceador de carga com o Apache mod_proxy e o Tomcat. Eu tenho os seguintes módulos disponíveis (mod_proxy, mod_proxy_balancer, mod_proxy_http) Eu tenho duas instâncias do Tomcat e o plano é rotear a solicitação para um dos servidores do Tomcat.

Meu aplicativo no Tomcat está funcionando bem quando acesso diretamente. www.mydomain: 8080 / myapp www.mydomain: 9080 / myapp

Meu servidor Tomcat.xml tem o seguinte Tomcat 1 Nome do mecanismo="Catalina" defaultHost="localhost" jvmRoute="tomcat1"

Tomcat 2 Nome do mecanismo="Catalina" defaultHost="localhost" jvmRoute="tomcat2"

Aqui está o que eu tenho no meu virtualhost.conf

<IfModule proxy_module>
        ProxyRequests on
        ProxyPreserveHost Off
        ProxyPass / balancer://mycluster/ stickysession=JSESSIONID
        ProxyPassReverse / balancer://mycluster/ stickysession=JSESSIONID
    ProxyPassReverseCookiePath /myapp /

        <Proxy balancer://mycluster >
                BalancerMember http://localhost:8080/myapp route=tomcat1
                BalancerMember http://localhost:9080/myapp route=tomcat2

                Require all granted
                ProxySet lbmethod=byrequests
        </Proxy>

    <Location /balancer>
        SetHandler balancer
        Require host www.mydomain.com
    </Location>
</IfModule>

Com a configuração acima, consigo acessar a primeira página do site. Quando eu acesso o www.mydomain.com, ele carrega a página de login (www.mydomain.com/login.do) Quando clico em outros links, ele abre as páginas corretas. Por exemplo: www.mydomain.com/password-reset.do O failover básico também funciona. Se eu desligar uma instância do Tomcat, ela será exibida na página do outro servidor e vice-versa.

Mas quando tento enviar qualquer pedido POST como tentar fazer login, o URL muda para www.mydomain / myapp / login.do e sempre mostra a página de login.

Não tenho certeza se as entradas conf acima estão totalmente corretas em relação ao que desejo. Alguém pode me dizer o que está errado? Também, por favor, deixe-me saber se estou faltando alguma coisa aqui em relação à sucilidade. Eu também gostaria de ter arquivos de imagem e outros arquivos servidos diretamente do servidor da Web. Por favor, deixe-me saber como posso fazer isso.

Obrigado

    
por user464352 07.04.2018 / 17:37

1 resposta

0

Existem dois casos em que isso geralmente acontece. Não envolve o balanceador - acontece do mesmo jeito com um único back-end.

  1. Um local no HTML do aplicativo pode conter um URL absoluto literal como o link para que o POST vá até lá (o que fato bate backend com link ). Existe uma ampla gama de soluções para isso.

  2. Outra possibilidade. O POST geralmente resulta em um redirecionamento (302). O back-end pode redirecionar para um URL absoluto link que não seria detectado. Seu ProxyPassReverse atualmente captura apenas o link . Você pode adicionar ProxyPassReverse / http://example.com/myapp abaixo do seu como um adicional, é permitido.

Ambos os casos são simples de observar se você definir seu navegador para registrar solicitações / respostas de rede (opção de desenvolvedor no Firefox e no Chrome).

    
por 07.04.2018 / 22:10