proxy reverso do apache às vezes não funciona

1

Estou usando uma gota de oceano digital (Ubuntu 14.04.2 LTS (GNU / Linux 3.13.0-52-genérico x86_64)) para hospedar jira e confluência. Eles são iniciados no mesmo ip, mas diferentes portas. Eu queria acessá-los usando jira.team.domain.com e confluence.team.domain.com, então fui para a solução de proxy reverso, usando o apache 2.4.7.

As coisas foram muito boas e eu trabalhei muito rápido. A questão é que depois de alguns dias, por um determinado período de tempo, o proxy reverso não está funcionando e eu recebo 'hostname not resolved' no navegador. Eu verifiquei e os aplicativos jira e confluence estão acessíveis nos endereços ip: port (portas 8081 e 8091). Depois de um tempo, não sei exatamente quanto, começa a funcionar novamente.

A configuração é a seguinte:

O jira server.xml contém dois conectores:

            <Connector port="8080"

               maxThreads="150"
               minSpareThreads="25"
               connectionTimeout="20000"

               enableLookups="false"
               maxHttpHeaderSize="8192"
               protocol="HTTP/1.1"
               useBodyEncodingForURI="true"
               redirectPort="8443"
               acceptCount="100"
               disableUploadTimeout="true"
               proxyName="jira.team.domain.com"
               proxyPort="80"/>

            <Connector port="8081"

               maxThreads="150"
               minSpareThreads="25"
               connectionTimeout="20000"

               enableLookups="false"
               maxHttpHeaderSize="8192"
               protocol="HTTP/1.1"
               useBodyEncodingForURI="true"
               redirectPort="8443"
               acceptCount="100"
               disableUploadTimeout="true"/>

O Confluence server.xml também tem dois conectores:

<Connector port="8091" connectionTimeout="20000" redirectPort="8443"
            maxThreads="200" minSpareThreads="10"
            enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
            protocol="org.apache.coyote.http11.Http11NioProtocol" />

<Connector port="8090" connectionTimeout="20000" redirectPort="8443"
            maxThreads="200" minSpareThreads="10"
            enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
            protocol="org.apache.coyote.http11.Http11NioProtocol"
            proxyName="confluence.team.domain.com" proxyPort="80" />

e o /etc/apache2/sites-enabled/000-default.conf tem esta aparência:

<VirtualHost *:*>
  ServerName localhost
  # DocumentRoot /var/www/html

  <Proxy *>
    Require all granted
  </Proxy>

  # ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://jira.team.domain.com:8080/
  ProxyPassReverse / http://jira.team.domain.com:8080/
</VirtualHost>

<VirtualHost *:*>
  ServerName confluence.team.domain.com
  DocumentRoot /var/www/html
  <Proxy *>
    Require all granted
  </Proxy>

  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://confluence.team.domain.com:8090/
  ProxyPassReverse / http://confluence.team.domain.com:8090/
</VirtualHost>

Alguém poderia me ajudar a resolver esse problema?

    
por Tiberiu Maxim 27.07.2015 / 12:50

2 respostas

0

Isso soa um pouco semelhante a problemas que eu tive de proxy reverso de aplicativos Atlassian caracterizados por problemas intermitentes com o Apache, enquanto as instâncias do Tomcat parecem muito bem. O "nome do host não resolvido" no navegador não combina com isso, então talvez não, mas você pode tentar. Não vai doer nada para tentar.

Se o próprio servidor Apache estiver ocasionalmente tendo problemas para fazer uma consulta DNS, isso seria muito simples de resolver com o arquivo hosts. Certifique-se de que o fqdn esteja no /etc/hosts atribuído ao loopback (127.0.0.1) ou a qualquer interface em que o JIRA / Confluence esteja atendendo:

127.0.0.1 localhost jira.team.domain.com confluence.team.domain.com

Se você atribuí-lo ao loopback, você precisará ter certeza de que o JIRA e o Confluence estão ouvindo na interface de loopback (ou em todas as interfaces).

Um problema que tenho visto algumas vezes (geralmente retornando um erro 503 para o usuário) é o Apache detectando algum tipo de problema com o backend. Quando isso acontece, recua por 60 segundos por padrão. Isso pode ser um indício útil de que há um problema de contenção de recursos com o JIRA e / ou Confluence, portanto, ele não deve ser ignorado, mas 60 segundos de inatividade toda vez que o backend fica flakey é um pouco demais. Você pode desabilitar isso configurando o parâmetro retry nas diretivas ProxyPass:

<VirtualHost *:*>
  ServerName localhost
  # DocumentRoot /var/www/html

  <Proxy *>
    Require all granted
  </Proxy>

  # ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://jira.team.domain.com:8080/ retry=0
  ProxyPassReverse / http://jira.team.domain.com:8080/
</VirtualHost>

<VirtualHost *:*>
  ServerName confluence.team.domain.com
  DocumentRoot /var/www/html
  <Proxy *>
    Require all granted
  </Proxy>

  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / http://confluence.team.domain.com:8090/ retry=0
  ProxyPassReverse / http://confluence.team.domain.com:8090/
</VirtualHost>

A partir do mod_proxy docs:

Connection pool worker retry timeout in seconds. If the connection pool worker to the backend server is in the error state, Apache httpd will not forward any requests to that server until the timeout expires. This enables to shut down the backend server for maintenance and bring it back online later. A value of 0 means always retry workers in an error state with no timeout.

link

Se isso não funcionar, tente usar as Ferramentas do desenvolvedor do seu navegador para ver exatamente o que está ou não sendo retornado pelo Apache e quais cabeçalhos estão sendo definidos. Observar os logs do Apache usando tail -f /path/to/logs/goes/here enquanto você mash o botão de atualização não faria mal algum.

    
por 03.11.2015 / 23:58
0

Você nem precisa trabalhar com o nome do host no Apache conf na parte de backends / proxy. Tanto quanto você tenha configurado corretamente parte do proxy de "backends":

proxyName="jira.team.domain.com"
proxyPort="80"

... ou no caso de https ...

proxyName="jira.team.domain.com"
scheme="https"
proxyPort="443"

e configuração semelhante para a confluência (a opção para http que você já fez como mencionou na pergunta). Então o ProxyPass pode facilmente usar apenas um IP:

<VirtualHost *:*>
  ServerName jira.team.domain.com
  ...
  ProxyPass / http://127.0.0.1:8080/
  ...
</VirtualHost>

<VirtualHost *:*>
  ServerName confluence.team.domain.com
  ...
  ProxyPass / http://127.0.0.1:8090/
  ...
</VirtualHost>

Com essa configuração, você precisa apenas do registro de dns apontando para o host para evitar a necessidade de registros / etc / hosts no lado do cliente e corrigir ServerName na configuração do Apache para corresponder corretamente com Virtual Host (você tem apenas localhost para definição de jira) e proxyName apropriado em produtos Atlassian para a resposta correta que é enviada de volta ao usuário ...

No caso dessa configuração, não há espaço para o dns resolver no Apache como camada de proxy, então eu diria que você está ignorando o problema que você mencionou; -).

    
por 03.12.2018 / 22:02