Apache2 (Httpd) non funziona dopo l'aggiornamento a High Sierra


15

Ho un problema a causa del quale Apache non si avvia dopo l'aggiornamento a High Sierra 10.13.1. Non c'è nulla che mostri nei log degli errori, ma quando provo a apachectl startnon succede nulla. Se corro apachectl configtestricevo "Sintassi OK

Ho usato comandi come sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plistinutili. Apache non si avvia. Posso correre sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.pliste neanche quello funziona.

Ho dato un'occhiata all'elenco dei servizi di infusione e httpd appare nell'elenco insieme ad altri processi (mysql) ma lo stato di httpd mostra un "avvio" giallo anziché uno verde.

Ho provato molte cose diverse e quello che trovo è che se guardo il file system.log trovo com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Se eseguo apachectl start, il comando sembra funzionare, ma quando eseguo il comando stop ottengo "httpd (nessun file pid) non in esecuzione.
Ricevo anche l'output di com.; Apple.xpc.launchd [1] ( org.apache.httpd): passare da OnDemand a KeepAlive.

C'è qualcosa con High Sierra che impedisce ad Apache di funzionare quando ha funzionato bene in Sierra?


1
Stai mescolando Apache httpd di brew e Apple Apache httpd (i cui demoni di lancio avviano binari diversi)! Da dove viene visualizzato lo stato httpd (ovvero indicatore giallo o verde)? Quale guida iniziale alla configurazione hai usato?
klanomath,

Non li sto mescolando, stavo attraversando le fasi di utilizzo sia del brew che dell'apache di Apple, quando brew services list' I receive a yellow indicator, I checked with all of the available users and ran eseguo un elenco di servizi di brew` e tutti mostrano lo stesso indicatore. Per quanto riguarda una guida all'installazione, Ansible è stato utilizzato per configurare apache. Questo è stato fatto su altri 5 MacBook, stanno ancora eseguendo Sierra. Questo MacBook ha avuto un problema e una Apple ha eseguito una diagnostica e ripristinato il sistema operativo, aggiornando il sistema operativo su High Sierra
Alcyeonnero,

Con il mix intendo: hai installato almeno due binari apachectl e httpd (e due file di configurazione). Di solito è preferibile l'apachectl di brew (a causa del contenuto predefinito della variabile PATH, il tuo potrebbe essere diverso). L'apachectl di AFAIR brew non avvierà il httpd di Apple con l'opzione di avvio predefinita (es apachectl start.). Lo stesso con ... configtest!
klanomath,

Con "Ansible è stato usato per configurare apache" intendi questa guida: Playbook Ansible per lo sviluppo del Mac ? È meglio aggiungere un collegamento a / la guida pratica o alla configurazione. Le varie guide di installazione per le varie versioni di macOS contengono tutte configurazioni leggermente diverse / creano diversi ambiti.
klanomath,

Ho appena aggiornato a High Sierra questo fine settimana e sto riscontrando esattamente lo stesso problema. Ho usato la httpdformula di Homebrew e ora apache non risponde. Quando lo faccio brew services list, ottengo anche il file startedhttpd in giallo, e quando corro sudo apachectl stop, mi dice chehttpd (pid 87?) not responding.
wonder95

Risposte:


16

Secondo me hai nascosto i tuoi vari demoni / meccanismi di avvio httpd eseguendo troppi comandi relativi a httpd.

Con homebrew e homebrew's apache-httpd installati e il PATH predefinito hai sei modi per avviare httpd.

Apache di Apple:

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

Apache Homebrew:

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

Se hai copiato il file homebrew.mxcl.httpd.plist manualmente su ~ / Library / LaunchAgents / o / Library / LaunchDaemons / hai altre due opzioni per avviarlo caricandole (sudo) launchctl load ....

Se non hai modificato pesantemente i file di configurazione httpd o gli script apachectl, il ramo Apple utilizzerà il file httpd.conf di Apple in / var e DocumentRoot nella cartella / Library.

Il ramo homebrew utilizza le sottocartelle in / usr / local /.

Alcuni metodi di avvio non funzioneranno se hai associato le porte httpd a porte inferiori a 1024!

Se si utilizza (sudo) brew services ...per avviare httpd, è necessario utilizzare il (sudo) brew services listcomando appropriato per controllare lo stato:

Se lo avvii come root, elencalo con i privilegi di root:

sudo brew services start httpd > sudo brew services list

o con i privilegi dell'utente:

brew services start httpd> brew services list.


Per risolvere il tuo problema scarica httpd di Apple:

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • rimuovere qualsiasi homebrew.mxcl.httpd.plist installato manualmente
  • interrompere qualsiasi servizio httpd homebrew con (sudo) brew services stop httpd
  • fermare qualsiasi httpd avviato da apachectl:

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
    
  • Apri Activity Monitor e verifica che non sia in esecuzione alcun processo httpd.
  • Reboot

Ora - supponendo che tu voglia usare l'httpd di homebrew su porte privilegiate - inserisci:

sudo brew services start httpd

Controlla l'inizio con successo con sudo brew services list.


Quando provo la correzione che hai fornito, ricevo lo stesso output che ho fatto. apachectl stopfornisce l'output di httpd (no pid file) not runninge quando corro sudo brew services httpd start sudo brew services list indica apache2 (httpd) startedin un colore giallo Quando tento di accedere a qualsiasi pagina Web correlata, non riesco a farlo. Mi chiedo se l'aggiornamento a 10.13 abbia modificato qualcosa in apache impedendone l'avvio.
Alcyeonnero,

14

Per quanto riguarda httpd homebrew, un problema che ho riscontrato di recente è stato un vecchio file httpd.pid rimasto che impediva l'avvio di httpd. Sintomo è stato apachectl startdetto che httpd è già in esecuzione, ma non lo era.

La causa era un vecchio file qui:

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

La soluzione era eliminare questo file pid e quindi httpd è stato avviato.


grande! questo è il mio problema quando il mio MBP decide che non si sveglierà dal sonno e devo spegnerlo.
frumbert,

2
Questa soluzione ha funzionato anche in MacOS Mojave. Brew pensava che Apache fosse in esecuzione ma non c'era alcun httpdmonitor di attività. Questo l'ha risolto.
Vahid Amiri,

Questo mi ha salvato un sacco di problemi!
SEJU

Questo ha funzionato anche per me. Non sono riuscito a caricare alcun sito Web e ho continuato a ricevere ERR_CONNECTION_REFUSED. Quando ho tentato di elencare i servizi in esecuzione, brew services listho ottenuto lo stato "avviato" giallo, il che significava che c'era qualcosa di sbagliato nello stato attivo del server. La rimozione del pid ha risolto questo problema e ora l'elenco dei servizi mostra lo stato attivo come "avviato" verde anziché ora. Grazie per questo!
Mike Kormendy,

Se il computer si è riavviato a causa di un panico del kernel / interruzione di corrente / ecc., È probabile che questo sia il problema. Grazie!
Dom Stubbs,

2

Ho affrontato lo stesso dopo aver effettuato l'aggiornamento a High Sierra prima di oggi. Ho scoperto che i seguenti file apache sono stati sostituiti con versioni nuovissime. Fortunatamente per tutti questi file esisteva un file FILE ~ precedente nella stessa cartella. Ho appena copiato la versione precedente ~ a quella originale, ho riavviato Apache e tutto è andato bene.

Nella cartella /etc/apache2:

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

Esempio:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf

Nella cartella /etc/apache2/extra/ci sono circa 10 file con ~ precedenti aggiunti, se tutti questi fossero cambiati, o solo i due che menzioni nella /etc/apache2/extra/cartella
Alcyeonnero

Vorrei iniziare con i file httpd.conf e httpd-vhosts.conf. Se si dispone di una configurazione SSL, è necessario aggiornare anche httpd-ssl.conf. Il resto dipende dal fatto che tu li abbia cambiati in precedenza. Vorrei usare un diff per vedere se i file sono cambiati, ad esempio diff httpd.conf httpd.conf ~ precedente su tutti gli altri file
Unmesh

Ho iniziato con quei file, che non hanno cambiato nulla.
Alcyeonnero,

1

Ho avuto lo stesso problema

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

Ciò significa che httpd è uscito in modo anomalo.

Ho quindi avviato manualmente httpd per vedere quale fosse il problema

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

Guardando i permessi era abbastanza chiaro

> 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

Penso di aver avviato httpd come root che ha causato questo problema. Ho rimosso i file e dopo

brew services restart httpd

tutto andava bene.


1

Mi sono imbattuto in questo di recente. La causa è che homebrew installa apache2 / httpd nelle cartelle accessibili all'utente e viene eseguito come utente (eseguendo il comando: brew services avvia httpd).

Non essere in esecuzione come utente normale significa che httpd non può ascoltare su porte privilegiate (1024 e precedenti).

Quindi, anche se httpd.conf è configurato per l'ascolto di 80 e 443, httpd non può ricevere richieste attraverso quelle porte.

La particolarità è quando si avvia httpd eseguendo il comando: sudo apachectl start. Questo comando avvia httpd come utente root. L'utente root può ascoltare sulle porte 80 e 443. httpd quindi rilascia nuovamente i privilegi in esecuzione come utente _www.

Quindi la risposta breve è eseguire httpd homebrew sulle porte 80 e 443 è avviarlo usando: sudo apachectl start. Puoi anche avviarlo con: sudo brew services start httpd. Brew ti dirà che sta rivendicando determinate cartelle come root, che suppongo vada bene ma non è necessario poiché sudo apachectl start non richiede autorizzazioni per i file e / o modifiche del proprietario.


0

Al contrario, suggerirei ciò che dice HomeBrew esegui sempre httpd da sudo. Lì per se fai ps -aef | grep httpd lo vedrai elencato come in esecuzione. Fare senza sudo non produce alcun output ps che potrebbe dare un'impressione sbagliata httpd non è in esecuzione.

Inoltre, non sono sicuro che ci siano configurazioni diverse o uguali caricate in entrambi i casi. Ho installato PHP e creato il file test.php con phpinfo nella directory DocumentRoot. Se avvii apache con sudo potresti vedere phpinfo con localhost / test.php mentre usando i servizi brew start httpd ti darà errore se DocumentRoot si trova nell'area dove è richiesto l'accesso root.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.