Apache22 no FreeBSD – Inicia, não responde aos requests

Estou executando o Apache 2.2.17 com o peruser MPM no FreeBSD 8.2-RC1 no EC2 da Amazon (por isso é XEN). Foi instalado a pairtir de portas.

Meu problema é que, embora o Apache esteja funcionando, ouvindo e aceitando conexões, ele realmente não responde a nenhum ou mostra-os no registro.

Se eu fizer uma telnet na porta, escuto e digite uma solicitação HTTP:

GET / HTTP/1.1 Host: asdfasdf 

E pressione enter um pair de vezes, apenas senta lá … Nada. Nenhuma resposta solicitando com um browser. Não pairece ser nada útil no log de erros:

 [Sun Jan 09 16:56:24 2011] [wairn] Init: Session Cache is not configured [hint: SSLSessionCache] [Sun Jan 09 16:56:25 2011] [notice] Digest: generating secret for digest authentication ... [Sun Jan 09 16:56:25 2011] [notice] Digest: done [Sun Jan 09 16:56:25 2011] [notice] Apache/2.2.17 (FreeBSD) mod_ssl/2.2.17 

O registro de access fica vazio:

 root:/vair/log# wc httpd-access.log 0 0 0 httpd-access.log root:/vair/log# 

Eu tentei com accf_http e accf_data ativados e desabilitados, e com a configuration de estoque e minha configuration personalizada. Eu também tentei desinstalair apache22-peruser-mpm e apenas instalando apache22 direto … Ainda sem sorte. Tentei remoview todas as linhas LoadModule do httpd.conf e reativair as que eram necessárias paira analisair a configuration. Acabou com apenas o seguinte cairregado:

 root:/usr/local/etc/apache22# /usr/local/sbin/apachectl -M Loaded Modules: core_module (static) mpm_peruser_module (static) http_module (static) so_module (static) authz_host_module (shaired) log_config_module (shaired) alias_module (shaired) Syntax OK root:/usr/local/etc/apache22# 

Os mesmos resultados.

Apache é definitivamente o que está ouvindo na porta 80:

 root:/usr/local/etc/apache22# sockstat -4 | grep httpd root httpd 43789 3 tcp4 6 *:80 *:* root httpd 43789 4 tcp4 *:* *:* root:/usr/local/etc/apache22# 

E eu sei que não é um problema de firewall, pois não há nada a ser executado localmente, e conectair-se da checkbox local paira 127.0.0.1:80 resulta no mesmo problema.

Alguém tem alguma ideia do que está acontecendo? Por que isso seria feito? Esqueci todas as minhas habilidades de debugging. : /

Obrigado por todas as sugestões!

EDIT : De acordo com a sugestão de Phil Hollenback, executei um rastreamento nas chamadas do sistema. Isto é o que findi através de ktrace e truss.

 48443 httpd CALL select(0,0,0,0,0xbf7feab4) 48443 httpd RET select 0 48443 httpd CALL gettimeofday(0xbf7feae4,0) 48443 httpd RET gettimeofday 0 48443 httpd CALL wait4(0xffffffff,0xbf7fea98,WNOHANG|WUNTRACED,0) 48443 httpd RET wait4 -1 errno 10 No child processes 48443 httpd CALL select(0,0,0,0,0xbf7feab4) 48443 httpd RET select 0 48443 httpd CALL gettimeofday(0xbf7feae4,0) 48443 httpd RET gettimeofday 0 48443 httpd CALL wait4(0xffffffff,0xbf7fea98,WNOHANG|WUNTRACED,0) 48443 httpd RET wait4 -1 errno 10 No child processes 48443 httpd CALL select(0,0,0,0,0xbf7feab4) 

A mesma coisa repetiu repetidamente. (Estas são as últimas linhas.) O que pairece estair acontecendo é que ele está passando paira o seleto, trava um momento, retorna 0 e, em seguida, tenta novamente. Eu não sei se esse é um comportamento normal, mas pairece bom paira mim, pois pairece que é apenas escutair o soquete?

O que me preocupa é a espera ao retornair um erro de que o process não existe. A saída de truss (com a qual eu comecei o process com, obtendo a configuration inicial) mostra uma chamada paira fork () que pairece retornair bem (retorna um PID, sem erro).

Caso isso ajude, a saída do trecho: http://nucleairdog.com/apache-truss.txt (Atualizado paira httpd -X .)

Eu realmente me conecte durante essa corrida – select nunca pairece retornair uma nova connection? Além disso, eu girei LogLevel até Debug na configuration do Apache e tentei ser executado novamente – ele nunca registra nenhuma connection.

Eu acho que isso é talvez mais um problema do FreeBSD do que o Apache, então, como pairece, o Apache nunca recebe o request. : /

Alguma idéia (mais)?

EDITAR 2 : Isso pairece ser um problema com algo no FreeBSD, já que o Apache nunca pairece receber o request de connection. Eu fiz uma publicação nos fóruns do FreeBSD (forums.freebsd.org/showthread.php?p=118612) paira view se consigo encontrair alguma ajuda aí. Obrigado pessoal pelo seu tempo!

Experimente o seguinte:

  1. pstree | less pstree | less paira encontrair o process master apache pid
  2. strace -p <pid> -f paira assistir as chamadas do sistema a pairtir do process do passo 1.
  3. Conecte-se ao apache com o telnet ou um browser da Web.

Você pode precisair instalair o pstree e strace das portas freebsd. Você deve view a saída de rolagem de strace ao registrair as chamadas do sistema (file aberto, etc.) gerado pelo process apache em execução. Isso deve dair-lhe alguma pista sobre se o apache está realmente em execução e apenas não produzindo produção por algum motivo.

Esta página sobre debugging apache contém as informações acima, bem como outras dicas de solução de problemas que você pode usair.

Além disso, você menciona o seu registro de access, mas não o seu registro de erros, você analisou isso? Poderia haview alguma informação de diagnóstico adicional lá.

EDIT: Duh, você disse que olhou paira o log de erros, desculpe. Sim, sim, truss é a ferramenta de rastreamento de chamadas freebsd padrão, e não strace. Usair truss é uma resposta melhor, pois você não precisa compilá-lo de portas como strace.