O proxy reverso Apache2 parece congelar intermitentemente?

6

O proxy reverso do Apache2 parece congelar intermitentemente ao fazer proxy de um aplicativo da web do Tomcat.

O problema é que de vez em quando (uma ou duas vezes por dia, geralmente após a inatividade) quando eu tento entrar neste aplicativo web com proxy, ele apenas congela. O aplicativo apenas congela indefinidamente, nenhum código de resposta 500 ... o navegador apenas aguarda e aguarda.

Se eu continuar tentando sugerir o endereço da web no meu navegador, ele só voltará a funcionar novamente.

Eu tentei reproduzir esse problema navegando diretamente para o aplicativo da Web na porta 8080 do Tomcat, mas nunca consegui reproduzi-lo sem passar pelo proxy reverso.

Aqui está minha configuração de proxy reverso ... alguma falha encontrando idéias? obrigado

/ etc / apache2 / sites-available / default

ProxyPass /manage/ http://localhost:8080/manage/
ProxyPassReverse /manage/ http://localhost:8080/manage/

ProxyPass /manage http://localhost:8080/manage
ProxyPassReverse /manage http://localhost:8080/manage

/etc/apache2/mods-available/proxy.conf

  <IfModule mod_proxy.c>
    #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.

        ProxyRequests Off

        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all
                Allow from all
        </Proxy>

        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block

        ProxyVia On
    </IfModule>

Mais informações: (não tenho certeza se relevante)

Módulos apache ativados:

core_module (estático)  log_config_module (estático)  logio_module (estático)  mpm_worker_module (estático)  http_module (estático)  so_module (estático)  alias_module (compartilhado)  auth_basic_module (compartilhado)  authn_file_module (compartilhado)  authz_default_module (compartilhado)  authz_groupfile_module (shared)  authz_host_module (compartilhado)  authz_user_module (compartilhado)  autoindex_module (compartilhado)  cgid_module (compartilhado)  deflate_module (compartilhado)  dir_module (compartilhado)  env_module (compartilhado)  mime_module (compartilhado)  negotiation_module (compartilhado)  proxy_module (compartilhado)  proxy_ajp_module (compartilhado)  proxy_connect_module (compartilhado)  proxy_http_module (compartilhado)  reqtimeout_module (compartilhado)  rewrite_module (compartilhado)  setenvif_module (compartilhado)  status_module (compartilhado)

Atualização: agora estou usando o protocolo ajp para o proxy. Um conjunto de configurações ProxyPass foi adicionado, por exemplo,

ProxyPass /manage ajp://localhost:8009/manage max=20 ttl=120 acquire=10000 retry=0
ProxyPassReverse /manage ajp://localhost:8009/manage
    
por tinny 08.05.2011 / 09:05

3 respostas

1

Eu tentaria usar ajp para se conectar ao tomcat do apache.
Por favor, teste a configuração usando o mod_proxy_ajp com o Tomcat.
De logs, parece que o tomcat não respondeu ao pedido do apache. Ele recusou a conexão.

Se você tiver muito tráfego, pesquise mais fundo nos registros de seu aplicativo. Poderia ser um impasse ou maxthreads alcançado.

HTH

    
por 09.05.2011 / 06:34
1

Verifique se o cache de arquivos do Apache está desativado.

# LoadModule file_cache_module modules/mod_file_cache.so

Se isso não resolver o problema (isso não deve parecer um problema de cache) tente depurar usando mod_jk. Baixe a versão mod_jk apropriada para o seu Apache, configure-a e configure o nível de log para DEBUG

# Set the jk log level [debug/error/info] 
JkLogLevel          debug

Além disso, inclua toneladas de informações nos seus registros do apache

LogFormat "%h %l %u %t \" %m \"%V\" \"%r \" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D CustomLogFormat
. . .
CustomLog "|C:/Apache2/bin/rotatelogs.exe C:/Apache2/logs/access_%Y%m%d.log 86400" CustomLogFormat

Agora você deve ter um log Apache com microssegundos para veicular a página e um log no nível de depuração da sua conexão AJP 1.3 para o tomcat (com mod_jk).

Feito isso, reinicie o apache e tente forçar esse erro de congelamento. Quando o erro acontece, verifique o tempo e navegue pelos registros para ver o que aconteceu naquele instante, quanto tempo o apache gastou processando e, portanto,.

Não resolverá nada, mas possivelmente lhe dará algumas dicas sobre o que está acontecendo.

    
por 11.05.2011 / 12:42
0

Se você está recebendo uma conexão recusada, pode estar atingindo a contagem maxthread no Tomcat. O que é o maxclient definido para o Apache? O que é o maxthread definido no Tomcat? Você quer ter certeza que seu maxclient não exceda maxthread. Se não, o Apache tentará fazer mais proxy do que o Tomcat pode servir e o Tomcat irá recusar conexões.

Além disso, se você retry=0 no final de suas declarações do ProxyPass, o Apache não desativará o trabalhador de back-end e sua recuperação quando esse problema for encontrado será mais rápida.

    
por 11.05.2011 / 00:04