Número da porta do Apache que aparece na URL nos redirecionamentos

2

EDIT: RESOLVEU

EDITAR : Substituído 8443 por 8043 (para corrigir possíveis conflitos de números de porta com o Shibboleth SP)

Estou tentando mudar o Apache (apache 2.4) para escutar na porta 8080 e 8043 em vez de 80 e 443 (portanto, não preciso de sudo / root para iniciá-lo). O dispositivo de balanceamento de carga F5 BigIP na frente escuta 80 e 443, e fará o balanceamento de carga dos usuários finais para 8080 e 8043 nos servidores da Web.

No entanto, quando um navegador da Web acessa nosso site (por exemplo, link ), nossas configurações do apache fazem com que ele redirecione com o número da porta 8043! (por exemplo, link ). Isso obviamente acaba (já que o foo.bar resolve o IP do dispositivo F5 BigIP, que não tem nada na porta 8043).

O Apache Config relevante é assim:

<Proxy balancer://UM>
        Order deny,allow
        Allow from all
        BalancerMember ajp://10.25.145.130:8010 route=a keepalive=On disablereuse=On
        BalancerMember ajp://10.25.145.131:8010 route=b keepalive=On disablereuse=On
        ProxySet lbmethod=bybusyness stickysession=UMLB nofailover=Off
        SetEnvIf Cookie UMLB HAVE_UM_ROUTE
        Header add Set-Cookie "UMLB=x.%{BALANCER_WORKER_ROUTE}e;path=/;" env=!HAVE_UM_ROUTE
</Proxy>

<Proxy balancer://IDP>
        Order deny,allow
        Allow from all
        BalancerMember ajp://10.25.145.130:8009 route=a keepalive=On disablereuse=On
        BalancerMember ajp://10.25.145.131:8009 route=b keepalive=On disablereuse=On
        ProxySet lbmethod=bybusyness stickysession=IDPLB nofailover=Off
        SetEnvIf Cookie IDPLB HAVE_IDP_ROUTE
        Header add Set-Cookie "IDPLB=x.%{BALANCER_WORKER_ROUTE}e;path=/;" env=!HAVE_IDP_ROUTE
</Proxy>

<VirtualHost *:8043>
        ServerName foo.bar
        DocumentRoot /var/www/html

        ProxyPass /idp balancer://IDP/idp
        ProxyPass /UserManagement balancer://UM/UserManagement

        SSLEngine on
</VirtualHost>

EDIT (informações adicionais) :

Olhando para o HTTP Trace (chrome addon) eu vejo que existem vários redirecionamentos que funcionam bem, mas quando chega aqui ele falha e redireciona com a porta 8043 no final (é por isso que ele falha, se eu remover manualmente: 8043 na URL após o redirecionamento funciona)

GET https://foo.bar/idp/AuthnEngine
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Referer: https://foo.bar/idp/profile/SAML2/Redirect/SSO?SAMLRequest=blahblahblah
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,de;q=0.6
Cookie: JSESSIONID=blahblahblah; _idp_authn_lc_key=blahblahblah; IDPLB=x.b; BIGipServerblahblah=blahblahblah

HTTP/1.1 302 Moved Temporarily
 Redirect to: https://foo.bar:8043/UserManagement/private/Login?redirectURL=blahblahblah
Date: Tue, 05 Jan 2016 18:32:32 GMT
Expires: 0
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Pragma: no-cache
Set-Cookie: _pid_domain=blahblah; Domain=bar.com; Path=/; Secure
Location: https://foo.bar:8043/UserManagement/private/Login?redirectURL=blahblahblah
Content-Length: 0
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/plain; charset=UTF-8

Como o aplicativo tomcat do Back-End está fornecendo o Redirect com o 8043, imaginei que o ProxyPassReverse é a solução correta para corrigir, então tentei o seguinte: (não funcionou, os mesmos resultados)

ProxyPass /idp balancer://IDP/idp
ProxyPassReverse /idp https://foo.bar/idp

ProxyPass /UserManagement balancer://UM/UserManagement
ProxyPassReverse /UserManagement https://foo.bar/UserManagement

Também tentei o seguinte (os mesmos resultados):

ProxyPass /idp balancer://IDP/idp
ProxyPassReverse /idp balancer://IDP/idp

ProxyPass /UserManagement balancer://UM/UserManagement
ProxyPassReverse /UserManagement balancer://UM/UserManagement

Até tentei uma URL falsa para o ProxyPassReverse, só para ver se tinha algum efeito, e NÃO FAZ! Os resultados do Rastreamento HTTP são os mesmos, ele não ajusta o URL nos redirecionamentos do aplicativo de back-end.

O que está acontecendo aqui?

Obrigado Ben

    
por ansichart 05.01.2016 / 00:22

2 respostas

1

Então eu desisti de obter o ProxyPassReverse para trabalhar com a AJP. No entanto, encontrei uma maneira diferente que realmente funciona!

<Location "/idp">
                ProxyPass balancer://IDP/idp
                Header edit Location foo.bar:8043 foo.bar
</Location>

Isso removerá o: 8043 do cabeçalho Local em um redirecionamento HTTP 302 Temporário. O ProxyPassReverse deve fazer isso, mas aparentemente NÃO funciona adequadamente com o AJP e o Balancer, pelo menos na minha configuração.

    
por 08.01.2016 / 01:29
3

Verifique seu link de redirecionamento para apontar em foo.bar

Em seguida, altere sua configuração para:

...
<VirtualHost *:8443>
ServerName foo.bar
...

The NameVirtualHost directive no longer has any effect, other than to emit a warning. Any address/port combination appearing in multiple virtual hosts is implicitly treated as a name-based virtual host.

De Atualização do Apache 2.4

E não se esqueça de ouvir a porta 8443 na configuração do Apache

Listen 8443
    
por 05.01.2016 / 10:44

Tags