Erros de conexão no proxy httpd do Apache, mas apenas para alguns vhosts

1

Eu configurei um proxy reverso do Apache v2.4 em uma máquina do CentOS 7, atendendo solicitações para vários vhosts; entre estes existem servidores de aplicativos Atlassian.

O endereço IP privado do proxy é 10.0.0.77, seu endereço IP público é 77.77.77.77 e vários registros DNS A mapeiam o IP público para vários FQDN: foo.example.com , bar.example.com , etc.

Existe um NAT em vigor:

77.77.77.77:10080 -> 10.0.0.77:80
77.77.77.77:10443 -> 10.0.0.77:443

que é necessário porque o endereço IP público do proxy também é usado para outros serviços. A configuração é a mesma que esta outra questão .

Aqui abaixo está um exemplo da configuração do vhost (simplificada), /etc/httpd/conf.d/foo.conf :

<VirtualHost *:80>
    ServerName foo.example.com
    ProxyRequests       Off
    ProxyPreserveHost   Off
    SetEnv proxy-nokeepalive 1
    Redirect "/" "https://foo.example.com:10443/"
</VirtualHost>

<VirtualHost *:443>
    ServerName foo.example.com
    ServerSignature On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    SSLEngine On
    SSLProtocol ALL -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    # SSLCipherSuite shortened here for simplicity
    SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384"
    SSLCertificateFile      /etc/httpd/ssl/proxy.crt
    SSLCertificateKeyFile   /etc/httpd/ssl/proxy.key
    SSLCACertificateFile    /etc/httpd/ssl/proxy.ca.crt
    ProxyRequests           Off
    ProxyPreserveHost       On
    ProxyPass           "/" "http://foo.example.com:8080/" 
    ProxyPassReverse    "/" "http://foo.example.com:8080/"
</VirtualHost>

Essa configuração funciona bem com dois servidores Jira, um servidor Stash, um servidor Confluence v6.10 e vários outros servidores. No entanto, o navegador da web falha ao carregar um vhost de servidor proxy do Bamboo v6.4 e uma plataforma Question2Answer.

No Firefox, o erro relatado é NS_ERROR_NET_TIMEOUT . No IE, o erro é:

There was a temporary DNS error. Try refreshing the page.
Error Code: INET_E_RESOURCE_NOT_FOUND

No registro de acesso do httpd para cada vhost com falha, não há nada, nem mesmo no LogLevel trace8 , então, aparentemente, o pedido nem sequer atingiu o proxy.

Eu posso acessar o Bamboo via curl a partir do proxy (um sinal -L é necessário, pois o Bamboo serve um 302):

[root@proxy]# curl -XGET http://bamboo.example.com:8085/

[root@proxy]# curl -v -XGET http://bamboo.example.com:8085/
* About to connect() to bamboo.example.com port 8085 (#0)
*   Trying 10.0.0.11...
* Connected to bamboo.example.com (10.0.0.11) port 8085 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: bamboo.example.com:8085
> Accept: */*
> 
< HTTP/1.1 302 Found
< Server: Apache-Coyote/1.1
< X-ASEN: SEN-4619603
< X-Frame-Options: SAMEORIGIN
< X-Content-Type-Options: nosniff
< Vary: Accept-Encoding
< Set-Cookie: JSESSIONID=E4D13B8AD7D4D172F4E5F834D1E89710; Path=/; Secure; HttpOnly
< Cache-Control: no-store
< Location: /userlogin!doDefault.action?os_destination=%2Fstart.action
< Content-Language: en-US
< Content-Length: 0
< Date: Mon, 01 Oct 2018 15:06:19 GMT
< 
* Connection #0 to host bamboo.example.com left intact

[root@proxy]# curl -L -XGET http://bamboo.example.com:8085/
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Log in as a Bamboo user</title>
    <meta http-equiv="X-UA-Compatible" content="IE=EDGE" />

    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="-1" />

    <meta name="application-name" content="Bamboo" />
    (...)

O firewall nos servidores de destino é aberto do servidor para o proxy (observe que os aplicativos Atlassian são executados em portas não padrão, por exemplo, o Jira exibe conteúdo no TCP / 8080).

Estou perplexo porque quase todos os outros vhosts funcionam perfeitamente. Também verifiquei cuidadosamente o caminho da URL e está correto.

  • Qual poderia ser a causa desse problema?

  • Existe uma maneira de rastrear a solicitação HTTP de uma maneira melhor? Eu uso HTTP Header Live ao vivo do Firefox por enquanto e gostaria de encontrar uma ferramenta mais complexa.

por dr01 28.09.2018 / 16:53

2 respostas

0

O erro relatado pelo IE me alertou. Os registros do DNS A para os vhosts com falha não apontam para o servidor proxy, mas para os IPs privados dos servidores.

Eu não encontrei o problema mais cedo porque o Firefox relatou apenas um tempo limite genérico.

    
por 05.10.2018 / 17:11
2

Você deve conseguir ver algo no log de erros do Apache para as solicitações com falha, se o problema estiver na configuração. Geralmente eles estão em /var/log/apache2/error.log ou em algum lugar semelhante. Os tempos limite indicam que não é possível alcançar o servidor de backend na configuração. Como você pode alcançá-lo com o curl, provavelmente seria um problema de configuração.

Se não houver nada lá ou o log de acesso (no mesmo local) para as solicitações que você está fazendo, provavelmente eles não estão atingindo o proxy para começar. Eu verificaria a configuração do DNS para bamboo.example.com está correta e apontando para o seu proxy como esperado.

Você pode usar curl para acessar o proxy externamente para ver o que está acontecendo com mais detalhes. Experimente dig ou nslookup primeiro para verificar se o nome está resolvido para o IP esperado.

Meu palpite seria um problema entre cliente - > proxy, porque se fosse um tempo limite no proxy - > backend você provavelmente obteria um código de erro 504 no navegador.

    
por 03.10.2018 / 13:05