15 votos

Apache2 (Httpd) no funciona tras la actualización a High Sierra

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

He utilizado comandos como sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist en vano. Apache no se inicia. Puedo ejecutar sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plist y eso tampoco funciona.

He echado un vistazo a la lista de servicios de brew y httpd aparece en la lista junto con otro proceso (mysql) pero el estado de httpd está mostrando un "iniciado" amarillo en lugar de verde.

He probado muchas cosas diferentes, y lo que estoy encontrando es que si miro 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) not running.
También estoy recibiendo la salida de com.;apple.xpc.launchd[1] (org.apache.httpd): Por favor, cambie de OnDemand a KeepAlive.

¿Hay algo con High Sierra que está impidiendo que Apache se ejecute cuando funcionaba bien en Sierra?

1 votos

Estás mezclando el Apache httpd de Brew y el Apache httpd de Apple (cuyos demonios de lanzamiento inician binarios diferentes). ¿De dónde obtienes el estado de httpd (es decir, el indicador amarillo frente al verde)? ¿Qué guía de configuración inicial ha utilizado?

0 votos

No los estoy mezclando, estaba siguiendo los pasos de uso probando tanto el brew como el apache de Apple, Cuando realizo un brew services list' I receive a yellow indicator, I checked with all of the available users and ran brew services list` y todos muestran el mismo indicador. En cuanto a una guía de configuración, se utilizó Ansible para configurar apache. Esto se ha hecho en otros 5 MacBooks, todavía están ejecutando Sierra. Este MacBook tuvo un problema y un Apple ejecutó un diagnóstico y reinició el sistema operativo, mientras que la actualización del sistema operativo a High Sierra

0 votos

Con mezclar me refiero a: tener al menos dos binarios apachectl y httpd instalados (y dos archivos de configuración). Normalmente se prefiere el apachectl de brew (por el contenido por defecto de la variable PATH, aunque el tuyo puede ser diferente). AFAIR apachectl de brew no iniciará el httpd de Apple con la opción de inicio por defecto (es decir apachectl start ). Lo mismo ocurre con ... configtest ¡!

17voto

klanomath Puntos 19587

En mi opinión, has estropeado tus diversos mecanismos de lanzamiento/arranque de httpd al ejecutar demasiados comandos relacionados con httpd.

Con homebrew y apache-httpd instalado y el PATH por defecto tienes seis formas de iniciar httpd.

El Apache de Apple:

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

El Apache de Homebrew:

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

Si has copiado el archivo homebrew.mxcl.httpd.plist manualmente a ~/Library/LaunchAgents/ o a /Library/LaunchDaemons/ tiene dos opciones más para iniciarlo cargándolo con (sudo) launchctl load ... .

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

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

Algunos métodos de lanzamiento no funcionarán si se han vinculado los puertos httpd a puertos inferiores a 1024.

Si utiliza (sudo) brew services ... para arrancar httpd hay que utilizar el (sudo) brew services list para comprobar el estado:

Si lo inicias como Root, entonces lánzalo 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 solucionar tu problema descarga el httpd de Apple:

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

  • eliminar cualquier instalación manual homebrew.mxcl.httpd.plist

  • detener cualquier servicio httpd homebrew con (sudo) brew services stop httpd

  • detener cualquier httpd iniciado por apachectl:

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
  • Abra el Monitor de Actividad y compruebe que no se está ejecutando ningún proceso httpd.

  • Reiniciar

Ahora - asumiendo que quieres usar el httpd de homebrew en puertos privilegiados - entra:

sudo brew services start httpd

Compruebe el inicio exitoso con sudo brew services list .

0 votos

Al intentar el arreglo que has proporcionado, recibo la misma salida que yo. apachectl stop proporciona la salida de httpd (no pid file) not running y cuando corro sudo brew services httpd start sudo brew services list indica apache2 (httpd) started en un color amarillo Cuando intento acceder a cualquier cosa relacionada con la página web no puedo. Me pregunto si la actualización a 10.13 alteró algo en apache impidiendo que se inicie.

17voto

Eduard Rozenberg Puntos 168

En lo que respecta a homebrew httpd, un problema que me encontré recientemente fue un viejo archivo httpd.pid que impedía que httpd se iniciara. El síntoma era apachectl start dice que httpd ya está en marcha, pero no lo estaba.

La causa era un archivo antiguo aquí:

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

La solución fue borrar este archivo pid y entonces httpd arrancó.

0 votos

Este es mi problema cuando mi MBP decide que no va a despertar del sueño y tengo que apagarlo.

2 votos

Esta solución también funcionó en macOS Mojave. Brew pensó que Apache se estaba ejecutando pero no había httpd en el monitor de actividad. Esto lo arregló.

0 votos

Esto me ha ahorrado muchos problemas.

2voto

MikeyLikesIT Puntos 21

Me he encontrado con lo mismo después de actualizar a High Sierra hoy mismo. Encontré que los siguientes archivos de apache fueron reemplazados por versiones nuevas. Afortunadamente para todos estos archivos existía un archivo FILE~previous en la misma carpeta. Simplemente copié la versión ~previa a las originales, reinicié apache y todo estuvo bien.

En la carpeta /etc/apache2 :

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

Ejemplo:

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

0 votos

En la carpeta /etc/apache2/extra/ hay aproximadamente 10 archivos con ~previo anexado, deben cambiarse todos, o sólo los dos que mencionas en el /etc/apache2/extra/ carpeta

0 votos

Yo empezaría con los archivos httpd.conf y httpd-vhosts.conf. Si tienes configurado el SSL entonces necesitarías actualizar el httpd-ssl.conf también. El resto depende de si los has cambiado antes. Yo usaría un diff para ver si los archivos han cambiado, por ejemplo, diff httpd.conf httpd.conf~previous en todos los demás archivos

0 votos

He empezado con esos archivos, que no han cambiado nada.

1voto

Hans Pikkemaat Puntos 11

Tuve el mismo problema

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

Esto significa que httpd ha salido de forma anormal.

Luego inicié 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 inicié httpd como Root lo que causó este problema. He eliminado los archivos y después de

brew services restart httpd

todo estaba bien.

1voto

CaesarS Puntos 111

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

Si no se ejecuta como un usuario normal, httpd no puede escuchar en los puertos privilegiados (1024 e inferiores).

Así que aunque httpd.conf esté configurado para escuchar en 80 y 443, httpd no puede recibir peticiones a través de esos puertos.

La peculiaridad es cuando se inicia httpd ejecutando el comando: sudo apachectl start. Este comando inicia httpd como usuario Root. El usuario Root tiene permiso para escuchar en los puertos 80 y 443. httpd entonces pierde privilegios volviendo a ejecutarse como el usuario _www.

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X