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.