Apache2 (Httpd) não funciona após a atualização para High Sierra

15

Eu tenho um problema em que o Apache não inicia após a atualização para o High Sierra 10.13.1. Não há nada aparecendo nos logs de erro, mas quando tento apachectl startnada acontece. Se eu executar apachectl configtest, recebo "Sintaxe OK

Eu usei comandos como sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plistsem sucesso. O Apache não será iniciado. Eu posso correr sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.pliste isso também não está funcionando.

Dei uma olhada na lista de serviços de preparação e o httpd aparece na lista junto com outro processo (mysql), mas o status do httpd está mostrando um amarelo "iniciado" em vez de um verde.

Eu tentei muitas coisas diferentes, e o que estou descobrindo é que, se eu olhar para o arquivo system.log, encontro com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Se eu executar o apachectl start, o comando parece funcionar, mas quando executo o comando stop, recebo "httpd (sem arquivo pid) não executando.
Também estou recebendo a saída de com.; Apple.xpc.launchd [1] ( org.apache.httpd): mude do OnDemand para o KeepAlive.

Existe algo com High Sierra que está impedindo o Apache de funcionar quando correu bem no Sierra?

Alcyeonnero
fonte
11
Você está misturando o Apache httpd do brew e o Apache httpd da Apple (cujos daemons de lançamento iniciam binários diferentes)! De onde você obtém o status httpd (por exemplo, indicador amarelo x verde)? Qual guia de configuração inicial você usou?
klanomath
Não os estou misturando, eu estava seguindo as etapas de tentar o brew e o apache da Apple. Quando executo uma lista de brew services list' I receive a yellow indicator, I checked with all of the available users and ran serviços de brew` e todos eles mostram o mesmo indicador. Quanto ao guia de configuração, o Ansible foi usado para configurar o apache. Isso foi feito em outros 5 MacBooks, eles ainda estão executando o Sierra. Este MacBook teve um problema e uma Apple executou um diagnóstico e redefiniu o sistema operacional, enquanto atualizava o sistema operacional para High Sierra
Alcyeonnero 17/17/17
Com a mixagem, quero dizer: você tem pelo menos dois binários apachectl e httpd instalados (e dois arquivos de configuração). Normalmente, o apachectl do brew é preferido (por causa do conteúdo padrão da variável PATH, o seu pode ser diferente). O apachectl do AFAIR brew não inicia o httpd da Apple com a opção de início padrão (ou seja apachectl start). O mesmo com ... configtest!
klanomath
Com "Ansible foi usado para configurar o apache", você quis dizer este guia: Mac Development Ansible Playbook ? É melhor adicionar um link a um guia de instruções ou de configuração. Os vários guias de configuração para as várias versões do macOS contêm configurações ligeiramente diferentes / criam ambientes diferentes.
klanomath
Acabei de atualizar para High Sierra neste fim de semana e estou tendo exatamente o mesmo problema. Eu tenho usado a httpdfórmula Homebrew , e agora o apache não responde. Quando eu faço brew services list, eu também obter o startedpara httpd em amarelo, e quando eu corro sudo apachectl stop, ele me diz quehttpd (pid 87?) not responding.
wonder95

Respostas:

16

Na minha opinião, você organizou seus vários mecanismos de inicialização / daemons httpd executando muitos comandos relacionados a httpd.

Com o homebrew e o apache-httpd do homebrew instalado e o PATH padrão, você tem seis maneiras de iniciar o httpd.

Apache da Apple:

  • sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • sudo /usr/sbin/apachectl start

Apache de Homebrew:

  • sudo apachectl start
  • apachectl start
  • sudo brew services start httpd
  • brew services start httpd

Se você copiou o arquivo homebrew.mxcl.httpd.plist manualmente para ~ / Library / LaunchAgents / ou / Library / LaunchDaemons /, você tem mais duas opções para iniciá-lo carregando-as (sudo) launchctl load ....

Se você não modificou os arquivos de configuração httpd ou os scripts apachectl, a filial da Apple utilizará o arquivo httpd.conf da Apple em / var e o DocumentRoot na pasta / Library.

O ramo homebrew usa subpastas em / usr / local /.

Alguns métodos de inicialização não funcionarão se você vincular as portas httpd a portas inferiores a 1024!

Se você usa (sudo) brew services ...para iniciar o httpd, precisa usar o (sudo) brew services listcomando apropriado para verificar o status:

Se você iniciá-lo como root, liste-o com root privs:

sudo brew services start httpd > sudo brew services list

ou com privs do usuário:

brew services start httpd> brew services list.


Para resolver seu problema, descarregue o httpd da Apple:

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • remova qualquer homebrew.mxcl.httpd.plist instalado manualmente
  • interrompa qualquer serviço httpd homebrew com (sudo) brew services stop httpd
  • pare qualquer httpd iniciado por apachectl:

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
    
  • Abra o Activity Monitor e verifique se nenhum processo httpd está em execução.
  • Reiniciar

Agora - supondo que você queira usar o httpd do homebrew em portas privilegiadas - digite:

sudo brew services start httpd

Verifique o início bem-sucedido com sudo brew services list.

Klanomath
fonte
Ao tentar a correção que você forneceu, recebo a mesma saída que recebi. apachectl stopfornece a saída de httpd (no pid file) not runninge quando eu executo sudo brew services httpd start sudo brew services list indica apache2 (httpd) startedem uma cor amarela. Quando tento acessar qualquer página da Web relacionada, não consigo acessar. Gostaria de saber se a atualização para 10.13 alterou algo no apache, impedindo-o de iniciar.
Alcyeonnero
14

Em relação ao httpd do homebrew, um problema que eu tive recentemente foi um arquivo httpd.pid antigo que estava impedindo o início do httpd. O sintoma foi apachectl startdito que o httpd já está sendo executado, mas não estava.

A causa era um arquivo antigo aqui:

/usr/local/var/run/httpd/httpd.pid

A solução foi excluir esse arquivo pid e o httpd foi iniciado.

Eduard Rozenberg
fonte
ótimo! esse é o meu problema quando meu MBP decide que não vai acordar do sono e eu tenho que dar um ciclo de energia.
frumbert
2
Essa solução também funcionou no MacOS Mojave. Brew pensou que o Apache estava funcionando, mas não havia um httpdmonitor de atividades. Isso consertou.
Vahid Amiri
Isso me salvou de muitos problemas!
SEJU
Isso funcionou para mim também. Não consegui carregar nenhum site e continuei recebendo ERR_CONNECTION_REFUSED. Quando tentei listar os serviços que estavam sendo executados brew services list, estava obtendo o status amarelo de 'iniciado', o que significava que havia algo errado com o status ativo do servidor. A remoção do pid corrigiu isso e agora a lista de serviços mostra o status ativo como um verde 'iniciado' agora. Obrigado por isso!
Mike Kormendy
Se sua máquina foi reinicializada com força após um pânico no kernel / corte de energia / etc, é provável que esse seja o seu problema. Obrigado!
Dom Stubbs
2

Eu enfrentei o mesmo depois que atualizei para High Sierra hoje cedo. Descobri que os seguintes arquivos apache foram substituídos por novas versões. Felizmente para todos esses arquivos, havia um arquivo FILE ~ anterior na mesma pasta. Eu apenas copiei a versão anterior para a original, reiniciei o apache e estava tudo bem.

Na pasta /etc/apache2:

./httpd.conf
./extra/httpd-vhosts.conf
./extra/httpd-ssl.conf

Exemplo:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf
Desarrumar
fonte
Na pasta /etc/apache2/extra/existem cerca de 10 arquivos com ~ anterior anexado a eles, deve tudo isso ser mudado, ou apenas os dois que você menciona na /etc/apache2/extra/pasta
Alcyeonnero
Eu começaria com os arquivos httpd.conf e httpd-vhosts.conf. Se você tiver uma configuração SSL, também precisará atualizar o httpd-ssl.conf. O resto depende se você os alterou anteriormente. Gostaria de usar um diff para ver se os arquivos foram alterados por exemplo diff httpd.conf httpd.conf ~ anterior sobre todos os outros arquivos
Unmesh
Eu comecei com esses arquivos, que não mudaram nada.
Alcyeonnero
1

Eu tive o mesmo problema

com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Isso significa que o httpd saiu anormalmente.

Comecei manualmente o httpd para ver qual era o problema

> httpd
(13)Permission denied: AH00091: httpd: could not open error log file /usr/local/var/log/httpd/error_log.

Olhando para as permissões, ficou bastante claro

> ll /usr/local/var/log/httpd/
total 96
-rw-r--r--  1 root  admin    242 15 apr 12:38 access_log
-rw-r--r--  1 root  admin  42062 20 jun 11:01 error_log

Acho que iniciei o httpd como root, o que causou esse problema. Eu removi os arquivos e depois

brew services restart httpd

tudo estava bem.

Hans Pikkemaat
fonte
1

Eu me deparei com isso recentemente. A causa é que o homebrew instala o apache2 / httpd em pastas acessíveis ao usuário e é executado como um usuário (executando o comando: brew services start httpd).

Não funcionar como um usuário comum significa que o httpd não pode escutar em portas privilegiadas (1024 e abaixo).

Portanto, mesmo se o httpd.conf estiver configurado para ouvir 80 e 443, o httpd não poderá receber solicitações por essas portas.

A peculiaridade é quando você inicia o httpd executando o comando: sudo apachectl start. Este comando inicia o httpd como usuário root. O usuário root tem permissão para escutar nas portas 80 e 443. O httpd, em seguida, retira os privilégios de volta como usuário _www.

Portanto, a resposta curta é executar o httpd de homebrew nas portas 80 e 443, iniciá-lo usando: sudo apachectl start. Você também pode iniciá-lo com: sudo brew services start httpd. O Brew lhe dirá que está reivindicando certas pastas para o root, o que suponho que seja bom, mas não necessário, pois o sudo apachectl start não requer permissões de arquivo e / ou alterações de proprietário.

CaesarS
fonte
0

Eu sugeriria, ao contrário, o que o HomeBrew diz que sempre execute o httpd pelo sudo. Lá, se você fizer o ps-aef | grep httpd, você o verá listado como em execução. Ficar sem o sudo não produz saída ps, o que pode dar uma impressão errada de que o httpd não está sendo executado.

Também não tenho certeza se há configurações diferentes ou iguais carregadas nos dois casos. Instalei o PHP e criei o arquivo test.php com o phpinfo no diretório DocumentRoot. Se você iniciar o apache com o sudo, poderá ver o phpinfo com o localhost / test.php enquanto estiver usando o brew services, o start httpd causará erro se o DocumentRoot estiver na área onde o acesso root é necessário.

Sebastian
fonte