Exécuté sur une instance AWS ec2, un peu de contexte, je suis un gars de frontend essayant de résoudre un problème avec un serveur web de production et j'ai épuisé mes connaissances en dépannage/linux cli et je suis hors de ma zone de confort.
J'ai fait un changement dans le httpd.conf
pour ajouter un nouveau domaine et a suivi les instructions qui disaient d'utiliser le fichier sudo service httpd restart
pour que les changements que j'ai faits prennent effet. Cela a provoqué une erreur et maintenant le service httpd s'est arrêté, ce qui signifie qu'aucun de nos sites n'est servi.
J'ai essayé les choses suivantes pour redémarrer le service httpd :
-
apachectl configtest
renvoie àSyntax OK
-
sudo service httpd start
renvoie l'erreur suivante :Redirecting to /bin/systemctl start httpd.service Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
-> en cours d'exécution systemctl status httpd.service
après cela donne cette information :
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2021-01-18 16:00:20 UTC; 1min 20s ago
Docs: man:httpd.service(8)
Process: 5943 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 5943 (code=exited, status=1/FAILURE)
Status: "Reading configuration..."
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: Starting The Apache HTTP Server...
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal httpd[5943]: [Mon Jan 18 16:00:20.317159 2021] [so:warn] [pid 5943] AH01574: module headers_module is already loaded, skipping
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: Failed to start The Apache HTTP Server.
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: Unit httpd.service entered failed state.
Jan 18 16:00:20 ip-172-31-38-82.eu-west-1.compute.internal systemd[1]: httpd.service failed.
[ec2-user@ip-172-31-38-82 ~]$
-
en cours d'exécution
sudo apachectl -k start
donne l'avertissement suivant mais pas d'erreur :[so:warn] [pid 5967] AH01574: module headers_module is already loaded, skipping
-
Un autre sujet que j'ai vu disait que quelque chose d'autre pouvait déjà fonctionner sur le port 80 et qu'il fallait utiliser
sudo netstat -lpAinet
pour voir ce qui est en cours d'exécution et qui est revenu :Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:ssh 0.0.0.0: LISTEN 3246/sshd
tcp 0 0 localhost:smtp 0.0.0.0: LISTEN 3208/master
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0: LISTEN 2750/rpcbind
udp 0 0 0.0.0.0:bootpc 0.0.0.0: 2971/dhclient
udp 0 0 0.0.0.0:sunrpc 0.0.0.0: 2750/rpcbind
udp 0 0 localhost:323 0.0.0.0: 2772/chronyd
udp 0 0 0.0.0.0:799 0.0.0.0:* 2750/rpcbind
Et rien ici ne dit port 80 ou n'a le nom de programme apache.
-
J'ai essayé une autre commande pour démarrer le service httpd qui a renvoyé une erreur indiquant que le service ne pouvait pas être lié au port 80 (je ne trouve plus la commande en question). L'article mentionne que le service httpd doit être démarré avec les permissions de root pour attribuer des numéros de port inférieurs à 1024. J'ai essayé de vérifier mes permissions en utilisant
sudo -l
et le message suivant a été renvoyé :User ec2-user may run the following commands on ip-172-31-38-82: (ALL) ALL (ALL) NOPASSWD: ALL
qui semble avoir les bonnes permissions pour l'exécuter.
Et c'est là que j'ai atteint la limite où je me sentais à l'aise pour dépanner par moi-même.
0 votes
Ce que systemd n'est pas capable de déterminer, c'est qu'en plus des journaux et des erreurs enregistrés dans journald, Apache maintient également son propre journal (d'erreurs). C'est généralement là qu'Apache enregistre les erreurs les plus utiles et les plus verbeuses (au démarrage). Celles-ci se trouvent généralement dans un fichier
/var/log
sous-répertoire1 votes
@HermanB Merci pour le conseil, j'ai jeté un coup d'oeil au journal des erreurs pour httpd et le plus récent (ainsi que tous ceux avant cela de mes tentatives précédentes) disent :
[suexec:notice] [pid 5995] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) AH00016: Configuration Failed
1 votes
Bien que Suexec soit assez particulier sur de nombreuses choses (voir par exemple : httpd.apache.org/docs/2.4/suexec.html ) ce message semble être un faux-fuyant. Le site
AH00016: Configuration Failed
Le message est probablement le vrai problème. Vous en verrez peut-être davantage dans les autres journaux d'Apache (y a-t-il un ssl-error-log ?).0 votes
Oui, il y a un ssl_error_log où le message le plus récent est
[ssl:emerg] [pid 5995] AH02565: Certificate and private key ip-172-31-38-82.eu-west-1.compute.internal:443:0 $
. Il y a aussi ssl_access_log et ssl_request_log mais ils sont tous deux vides. Je sais qu'il n'y a qu'un certificat SSL sur l'un des domaines et qu'il a expiré, cela pourrait-il être la cause de ce problème ?0 votes
Ce message d'erreur semble tronqué et il manque des détails importants. - De plus, un certificat expiré n'est pas en soi la raison pour laquelle Apache ne démarre pas, il y a plus que cela, mais un problème ssl semble être la cause principale.
0 votes
J'ai essayé de commenter le vhost pour le domaine qui utilise ssl dans le fichier httpd.conf pour voir si essayer de démarrer le service httpd sans cela (si c'est même comme ça que ça fonctionne) résoudrait quelque chose et ça n'a pas marché. Cette tentative de démarrage de httpd a créé une nouvelle ligne dans le fichier ssl_error_log avec un nouveau pid:6232
0 votes
Le fait que
apachectl configtest
réussit signifie qu'il ne s'agit pas d'une erreur de syntaxe. Le certificat SSL est suspect. Est-ce que AH00016 : Échec de la configuration répondre à votre question ?