Apache2 (Httpd) no funciona después de actualizar a High Sierra

15

Tengo un problema en el que Apache no se iniciará después de actualizar a High Sierra 10.13.1. No hay nada que se muestre en los registros de errores, pero cuando intento apachectl startno pasa nada. Si ejecuto apachectl configtest, recibo "Sintaxis OK

He usado comandos como sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plisten vano. Apache no se iniciará. Puedo correr sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plisty eso tampoco funciona.

Eché un vistazo a la lista de servicios de preparación y httpd aparece en la lista junto con otro proceso (mysql) pero el estado de httpd muestra un "iniciado" amarillo en lugar de uno verde.

He intentado muchas cosas diferentes, y lo que estoy encontrando es que si busco en el archivo system.log, encuentro com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Si ejecuto apachectl start, el comando parece funcionar, pero cuando ejecuto el comando stop obtengo "httpd (no pid file) no ejecutándose.
También estoy recibiendo la salida de com.; Apple.xpc.launchd [1] ( org.apache.httpd): cambie de OnDemand a KeepAlive.

¿Hay algo con High Sierra que impide que Apache se ejecute cuando funciona bien en Sierra?

Alcyeonnero
fuente
1
¡Estás mezclando Apache httpd de brew y Apache httpd de Apple (cuyos demonios de lanzamiento inician diferentes binarios)! ¿De dónde obtiene el estado httpd (es decir, indicador amarillo vs. verde)? ¿Qué guía de configuración inicial usaste?
klanomath
No los estoy mezclando, estaba siguiendo los pasos de probar tanto el breche como el apache de Apple, cuando realizo una lista de brew services list' I receive a yellow indicator, I checked with all of the available users and ran servicios de brebaje y todos muestran el mismo indicador. En cuanto a una guía de configuración, Ansible se usó para configurar apache. Esto se ha hecho en otros 5 MacBooks, todavía están ejecutando Sierra. Este MacBook tenía un problema y una Apple ejecutó un diagnóstico y restableció el sistema operativo, mientras actualizaba el sistema operativo a High Sierra
Alcyeonnero
Con la mezcla quiero decir: tienes al menos dos binarios apachectl y httpd instalados (y dos archivos de configuración). Por lo general, se prefiere el apachectl de brew (debido al contenido predeterminado de la variable PATH, el tuyo puede ser diferente). Apachectl de AFAIR brew no iniciará el httpd de Apple con la opción de inicio predeterminada (es decir apachectl start). Lo mismo con ... configtest!
klanomath
Con "Ansible se usó para configurar apache" te refieres a esta guía: ¿ Desarrollo de Mac Ansible Playbook ? Es mejor agregar un enlace a una / la guía de procedimientos o configuración. Las diversas guías de configuración para las diversas versiones de macOS contienen configuraciones ligeramente diferentes / crean diferentes envs.
klanomath
Acabo de actualizar a High Sierra este fin de semana, y estoy teniendo exactamente el mismo problema. He estado usando la httpdfórmula Homebrew , y ahora Apache no responde. Cuando lo hago brew services list, también obtengo el startedhttpd en amarillo, y cuando corro sudo apachectl stop, me dice quehttpd (pid 87?) not responding.
wonder95

Respuestas:

16

En mi opinión, mangaste tus diversos demonios de lanzamiento httpd / mecanismos de inicio ejecutando demasiados comandos relacionados con httpd.

Con homebrew y apache-httpd de homebrew instalados y la RUTA predeterminada, tiene seis formas de iniciar httpd.

Apache de 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

Si ha copiado el archivo homebrew.mxcl.httpd.plist manualmente en ~ / Library / LaunchAgents / o / Library / LaunchDaemons / tiene dos opciones más para comenzar cargándolos (sudo) launchctl load ....

Si no modificó los archivos de configuración httpd o los scripts apachectl en gran medida, la rama de Apple utilizará el archivo httpd.conf de Apple en / var y DocumentRoot en la carpeta / Library.

La rama homebrew usa subcarpetas en / usr / local /.

¡Algunos métodos de inicio no funcionarán si ha vinculado los puertos httpd a puertos inferiores a 1024!

Si usa (sudo) brew services ...para iniciar httpd, debe usar el (sudo) brew services listcomando adecuado para verificar el estado:

Si lo inicia como root, enumérelo con privilegios de root:

sudo brew services start httpd > sudo brew services list

o con privilegios de usuario:

brew services start httpd> brew services list.


Para resolver su problema, descargue el httpd de Apple:

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • eliminar cualquier homebrew.mxcl.httpd.plist instalado manualmente
  • detener cualquier servicio httpd homebrew con (sudo) brew services stop httpd
  • Detenga cualquier httpd iniciado por apachectl:

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
    
  • Abra Activity Monitor y verifique que no se esté ejecutando ningún proceso httpd.
  • Reiniciar

Ahora, suponiendo que desea utilizar httpd de homebrew en puertos privilegiados, ingrese:

sudo brew services start httpd

Verifique el comienzo exitoso con sudo brew services list.

klanomath
fuente
Al intentar la solución que proporcionó, recibo el mismo resultado que yo. apachectl stopproporciona la salida de httpd (no pid file) not runningy cuando ejecuto sudo brew services httpd start sudo brew services list indica apache2 (httpd) starteden color amarillo. Cuando intento acceder a cualquier página web relacionada, no puedo. Me pregunto si la actualización a 10.13 alteró algo en Apache impidiendo que se inicie.
Alcyeonnero
14

Con respecto a homebrew httpd, un problema con el que me topé recientemente fue un archivo httpd.pid sobrante que impedía que httpd se iniciara. El síntoma apachectl startdecía que httpd ya se está ejecutando, pero no fue así.

Porque era un archivo viejo aquí:

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

La solución fue eliminar este archivo pid y luego comenzó httpd.

Eduard Rozenberg
fuente
¡estupendo! Este es mi problema cuando mi MBP decide que no va a despertarse del sueño y tengo que apagarlo.
frumbert
2
Esta solución también funcionó en MacOS Mojave. Brew pensó que Apache se estaba ejecutando pero no había ningún httpdmonitor de actividad. Esto lo solucionó.
Vahid Amiri
¡Esto me salvó muchos problemas!
SEJU
Esto funcionó para mí también. No pude cargar ningún sitio web y seguí recibiendo ERR_CONNECTION_REFUSED. Cuando intenté enumerar los servicios que se estaban ejecutando, brew services listrecibí el estado amarillo 'iniciado', lo que significaba que había algo mal con el estado activo del servidor. Eliminar el pid solucionó esto y ahora la lista de servicios muestra el estado activo como un 'iniciado' verde en su lugar ahora. ¡Gracias por esto!
Mike Kormendy
Si su máquina se ha reiniciado duro después de un kernel panic / power cut / etc, probablemente sea su problema. ¡Gracias!
Dom Stubbs
2

Me enfrenté a lo mismo después de actualizarme a High Sierra el día de hoy. Encontré que los siguientes archivos apache fueron reemplazados por nuevas versiones. Afortunadamente para todos estos archivos existía un ARCHIVO ~ archivo anterior en la misma carpeta. Acabo de copiar la ~ versión anterior a las originales, reinicié Apache y todo estuvo bien.

En carpeta /etc/apache2:

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

Ejemplo:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf
Unmesh
fuente
En la carpeta /etc/apache2/extra/hay aproximadamente 10 archivos con ~ anterior anexa a ellos, deberían todos ellos pueden cambiar, o simplemente los dos que mencionas en la /etc/apache2/extra/carpeta
Alcyeonnero
Comenzaría con los archivos httpd.conf y httpd-vhosts.conf. Si tiene una configuración SSL, entonces también necesitaría actualizar httpd-ssl.conf. El resto depende de si los había cambiado antes. Usaría un diff para ver si los archivos han cambiado, por ejemplo, diff httpd.conf httpd.conf ~ anterior en todos los demás archivos
Unmesh
He comenzado con esos archivos, eso no cambió nada.
Alcyeonnero
1

Yo tuve el mismo problema

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

Esto significa que httpd salió anormalmente.

Luego comencé manualmente httpd para ver cuál era el problema

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

Mirando los permisos, estaba 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

Creo que comencé httpd como root que causó este problema. Eliminé los archivos y luego

brew services restart httpd

Todo estuvo bien.

Hans Pikkemaat
fuente
1

Me encontré con esto recientemente. La causa es que homebrew instala apache2 / httpd en carpetas accesibles para el usuario y se ejecuta como usuario (ejecutando el comando: brew services start httpd).

No ejecutarse como un usuario normal significa que httpd no puede escuchar en puertos privilegiados (1024 y menos).

Entonces, incluso si httpd.conf está configurado para escuchar 80 y 443, httpd no puede recibir solicitudes a través de esos puertos.

La peculiaridad es cuando inicia httpd ejecutando el comando: sudo apachectl start. Este comando inicia httpd como usuario root. El usuario raíz puede escuchar en los puertos 80 y 443. httpd luego deja de funcionar los privilegios como el usuario _www.

Entonces, la respuesta corta es ejecutar homebrew httpd en los puertos 80 y 443 es iniciarlo usando: sudo apachectl start. También puede iniciarlo con: sudo brew services start httpd. Brew le dirá que está reclamando ciertas carpetas para root, lo que supongo que está bien, pero no es necesario ya que sudo apachectl start no requiere permisos de archivo y / o cambios de propietario.

César
fuente
0

Sugeriría por el contrario lo que dice HomeBrew siempre ejecuta httpd por sudo. Por lo tanto, si hace ps -aef | grep httpd, verá que aparece como en ejecución. Hacerlo sin sudo no produce una salida ps que pueda dar una impresión incorrecta de que httpd no se está ejecutando.

Además, no estoy seguro de si hay configuraciones diferentes o iguales cargadas en ambos casos. Instalé PHP y creé el archivo test.php con phpinfo en el directorio DocumentRoot. Si comienza apache con sudo, puede ver phpinfo con localhost / test.php mientras usa brew services start httpd le dará un error si DocumentRoot está en el área donde se requiere acceso root.

Sebastian
fuente