502 Bad Gateway de ... resposta inválida do servidor upstream (apache e jboss)

StackOverflow https://stackoverflow.com/questions/1109241

  •  12-09-2019
  •  | 
  •  

Pergunta

Eu estou usando Apache em uma máquina para servir pedidos de JBoss em outra máquina. Tudo funciona bem quando eu inicialização JBoss e eu sou capaz de acessar o aplicativo web, mas depois de algumas horas eu finalmente começar a receber "O servidor proxy recebeu uma resposta inválida de um servidor upstream" erros. Se eu reiniciar o jboss, em seguida, tudo funciona bem novamente, mas várias horas mais tarde, eu tenho o mesmo problema ...

Alguém sabe o que poderia estar causando esse problema? Eu não tenho acesso aos logs de apache neste momento (eu deveria em poucas horas), mas parece ser algo com jboss desde reiniciá-lo é a correção temporária.

Eu estou usando jboss4.2.3 e Apache 1.3 com mod_jk. Eu não estou encontrando quaisquer erros nos logs JBoss e o aplicativo que eu estou tentando alcançar não está fazendo nada que leva um longo tempo. A página principal é apenas uma página de login simples. Eu tenho portos 8009 e 8080 aberta para a comunicação entre o servidor de aplicativo e servidor web. Eu não sei qual configuração está errado.

Foi útil?

Solução

Esta me parece mod_jk em Apache está ficando fora de sincronia com o conector AJP em JBoss. O protocolo AJP usa conexões persistentes, reutilizados entre o servidor web e servidor de aplicações, e se o protocolo não está configurado exatamente o mesmo em ambas as extremidades da conexão, eventualmente, as conexões ir obsoleto em uma das extremidades da conexão, mas a outra extremidade continua tentando usá-los. O sintoma é um erro 502.

Minha primeira sugestão é esta: não usar mod_jk a menos que você precisa. É complexo e difícil de configurar para obter um sistema estável. Se você não precisa de suas características de desempenho ou balanceamento de carga, eu sugiro usar mod_proxy vez. É tão bom para a maioria das aplicações, e muito fácil.

Mas se você quiser ficar com mod_jk, A primeira coisa que você precisa é se certificar de que você está usando a versão mais recente mod_jk (atualmente 1.2.28), uma vez que as versões mais antigas são notoriamente difíceis de configurar. Felizmente, mod_jk ainda é suportado em Apache 1.3.

Em seguida, verifique o arquivo de log mod_jk (configurado usando a diretiva JkLogFile). Se você está vendo um monte de erros relacionados com a ligação de todo o tempo as coisas vão mal, você precisa ajustar sua configuração jk em ambas as extremidades da conexão. O culpado mais provável é as configurações de tempo limite, então ler sobre aqueles aqui e certifique-se ambas as extremidades estão cantando da mesma folha hino.

Outras dicas

Eu também vi isso ocorrer usando Apache e Tomcat. Na minha situação particular, o aplicativo implantado para tomcat tinha um bug que tópicos de resposta causados ??para pendurar. Eventualmente tomcat correu para fora de segmentos de trabalho, e apache não foi capaz de estabelecer uma conexão.

No nosso caso, as conexões de banco de dados não estavam sendo liberados corretamente de volta para um pool de conexão, e outros tópicos estavam esperando indefinidamente para obter uma conexão do pool. No entanto, qualquer coisa que indefinidamente mantém uma resposta viva manipulação fio poderia levar ao mesmo problema.

Eu tive o mesmo problema, mas com o Apache e Glassfish. Finalmente, eu poderia corrigi-lo configurando o mesmo tempo de espera em ambos os lados.

Em Glassfish alterar a configuração ouvinte e no Apache modifiying os worker.properties com esta linha:

worker.worker_name.socket_timeout=300

Eu não tenho certeza sobre a maneira de configurar isso em JBoss, pode ser modificando o web.xml ou cluster-service.xml.

Se você estiver conectando Apache com Tomcat e acabou neste blog, assim como eu, faz sentido.

Aceitar conexão para AJP / 1.3 no tomcat resolvido esse erro para mim. Não se esqueça de comentar o serviço de protocolo HTTP.

**<!--<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
-->
<Connector port="8081" protocol="AJP/1.3"
           connectionTimeout="20000"
           redirectPort="8443" />**
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top