Apache/Débogage

Un livre de Wikilivres.
Aller à : navigation, rechercher


Sections

Logs[modifier | modifier le wikicode]

Contrairement à ce qui est dit quand Apache bloque au démarrage, il ne faut pas utiliser journalctl -xe pour lire les logs car il tronque chaque ligne à 125 caractères. Il faut lancer :

tail /var/log/apache2/error.log

Lecture seule[modifier | modifier le wikicode]

S'il est impossible de créer des fichiers ou répertoires depuis un navigateur c'est que le serveur n'autorise pas l'utilisateur apache à le faire dans le répertoire du site.

Les fonctions PHP s'affichent sur la page au lieu de s'exécuter[modifier | modifier le wikicode]

Si a2enmod php7.2 indique que le module est déjà installé, c'est peut-être lié à a2enmod userdir. Cela peut se régler avec :

vim /etc/apache2/mods-enabled/php7.2.conf

Commenter les lignes :

<IfModule mod_userdir.c>
...
</IfModule>

Et relancer Apache.

403 forbidden, client denied by server configuration[modifier | modifier le wikicode]

Ce message apparait dans les logs Apache quand le fichier auquel on tente d'accéder est protégé dans apache2.conf, par un deny, un require ou une absence de ce dernier. Dans ce cas, il faut l'ajouter :

<Directory /home>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Configuration error: No MPM loaded[modifier | modifier le wikicode]

Restaurer le apache2.conf d'origine, il doit y avoir une erreur dans la directive ServerRoot.

Load denied by X-Frame-Options: ... does not permit cross-origin framing[modifier | modifier le wikicode]

Il faut juste autoriser les iFrames vers votre site, en commentant dans apache2.conf la ligne qui commence comme :

Header always set X-FRAME-OPTIONS "SAMEORIGIN"

Missing suexec binary[modifier | modifier le wikicode]

Installer le module :

sudo apt-get install apache2-suexec-custom

suEXEC is disabled[modifier | modifier le wikicode]

Vérifier que le module est activé.

Erreurs vhost[modifier | modifier le wikicode]

Les problèmes suivants peuvent survenir lors des relances Apache.

Invalid command 'SuexecUserGroup'[modifier | modifier le wikicode]

Vérifier que le module est activé.

apache2: bad user name Utilisateur1[modifier | modifier le wikicode]

Un utilisateur Unix appelé dans la configuration n'existe pas. Il faut donc le créer :

useradd Utilisateur1


apache2: bad group name Groupe1[modifier | modifier le wikicode]

Un groupe Unix appelé dans la configuration n'existe pas. Il faut donc le créer :

groupeadd Groupe1


No such file or directory:... Cannot access directory '/etc/apache2/logs/'... Configuration check failed[modifier | modifier le wikicode]

Un répertoire Unix appelé dans la configuration n'existe pas. Il faut donc le créer :

mkdir /etc/apache2/logs


exit signal Segmentation fault (11)[modifier | modifier le wikicode]

Cela peut survenir quand PHP rencontre une erreur. Pour la connaitre précisément, il faut lancer le .php en shell (sans Apache). Exemple :

su www-data

php5 -q SendMail.php
  SMTP Error: Could not connect to SMTP host.

# Ou encore en écrivant le script sans .php :
php5 -r "chown('/home/Compte2', 'Compte1');"
  PHP Warning:  chown(): Operation not permitted in Command line code on line 1
# Vérification en shell
chown Compte1 /home/Compte2
  chown: modification du propriétaire de «/home/Compte2»: Opération non permise

Erreurs HTTPS[modifier | modifier le wikicode]

Échec de la connexion sécurisée. SSL a reçu un enregistrement qui dépasse la longueur maximale autorisée. (Code d'erreur : ssl_error_rx_record_too_long) [modifier | modifier le wikicode]

Le module d'Apache est activée mais son vhost est absent ou sa configuration ne contient pas SSLEngine on.

curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol[modifier | modifier le wikicode]

Il faut refaire comme il faut la configuration Apache ci-dessus.

curl: (60) SSL certificate problem: self signed certificate[modifier | modifier le wikicode]

C'est que la connexion fonctionne, les visiteurs doivent juste acquitter le message de leur navigateur Cette connexion n'est pas certifiée.

Enter passphrase for SSL/TLS keys for à chaque relance Apache[modifier | modifier le wikicode]

Vérifier la présence de la ligne suivante dans la configuration : SSLPassPhraseDialog exec:/etc/ssl/nomdedomaine.fr.pwd. Sinon, fdaire sauter le mot de passe :

openssl rsa -in nomdedomaine.fr.key -out nomdedomaine.fr.key.nopass

blocage du contenu mixte actif (mixed active content)[modifier | modifier le wikicode]

Il faut remplacer HTTP par HTTPS dans le code source du site Web.

Dans les logs SSL[modifier | modifier le wikicode]

RSA certificate configured for 127.0.0.1:443 does NOT include an ID which matches the server name[modifier | modifier le wikicode]

Il faut générer la clé en utilisant un FQDN.

CSR contains unsupported extensions[modifier | modifier le wikicode]

Le mot de passe du .csr contient des caractères spéciaux incompatibles, comme ! ou _. Il faut se contenter de l'alphanumérique.

Dans les logs Apache[modifier | modifier le wikicode]

Server should be SSL-aware but has no certificate configured[modifier | modifier le wikicode]

Réinstaller clé SSL.

Init: Unable to read server certificate from file ...csr[modifier | modifier le wikicode]

Le .cert est introuvable.

SSL Library Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (Expecting: TRUSTED CERTIFICATE) -- Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?[modifier | modifier le wikicode]

Il faut convertir le certificat SSL ainsi :

openssl x509 -inform der -in /etc/apache2/ssl/apache.crt -outform PEM -out /etc/apache2/ssl/apache.pem
vim /etc/apache2/sites-enabled/default-ssl.conf
# remplacement du .crt par le .pem
service apache2 restart

Sinon il faut retirer les BOM du certificat.

Sinon il faut retirer les autres fichiers du dossier contenant la clé et de celui du certificat (un autre), en leur conférant au maximum du chmod -R 644[1].

Certificate and private key do not match[modifier | modifier le wikicode]

Le certificat doit être un fichier .pem et la clé .key. Il est possible de le vérifier avec la commande suivante[2] :

$ (openssl x509 -noout -modulus -in /etc/ssl/certs/ssl-cert-snakeoil.pem | openssl md5 ;openssl rsa -noout -modulus -in /etc/ssl/private/ssl-cert-snakeoil.key | openssl md5) | uniq
(stdin)= 8cf9b840c3239f653be542149497f047

Quand les deux certificats correspondent il n'y a qu'une seule ligne, comme ci-dessus. Il faut donc retrouver le bon ou régénérer la paire. Pour y voir plus clair, la commande file permet de les identifier :

$ file /etc/ssl/*
nomdedomaine.fr.crt:      PEM certificate request
nomdedomaine.fr.csr:      PEM certificate request
nomdedomaine.fr.key:      PEM RSA private key
nomdedomaine.fr.pem:      PEM certificate
nomdedomaine.fr.pwd:      ASCII text
certs:                    directory
openssl.cnf:              ASCII text
private:                  directory
apache.key:               PEM RSA private key
apache.crt:               PEM certificate

AH01909: nomdedomaine.fr:443:0 server certificate does NOT include an ID which matches the server name[modifier | modifier le wikicode]

Le certificat installé est prévu pour un autre domaine ou sous-domaine. Il faut peut-être en acheter un pour tous les sous-domaines, ce qui se dit certificats SSL à validation de domaine (wildcard certificate en anglais).

Pass phrase incorrect for key[modifier | modifier le wikicode]

Soit on peut regénérer le fichier de la directive SSLPassPhraseDialog, soit on fait sauter le mot de passe demandé par la clé : openssl rsa -in privateAvecPassPhrase.key -out private.SansPassPhrase.key.

Erreurs .htaccess[modifier | modifier le wikicode]

Inopérant[modifier | modifier le wikicode]

Si le .htaccess ne produit aucune redirection, vérifier que le module Apache est bien activé :

 a2enmod rewrite

Et que la directive suivante figure au moins dans un répertoire parent du .htaccess :

AllowOverride All

Puis relancer Apache.

Dans le vhost du site, remplacer "*:80" par "IP_du_serveur:80".

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.[modifier | modifier le wikicode]

Il existe une redirection circulaire.

Erreurs CGI[modifier | modifier le wikicode]

Error 500 Erreur du serveur![modifier | modifier le wikicode]

Remplacer un Deny from all par un Allow from all. Sinon, regarder les logs. Par exemple, cela peut provenir de suexec policy violation => commenter la directive SuexecUserGroup.

Error 403 Accès interdit[modifier | modifier le wikicode]

Lister ce répertoire est interdit, il faut donc connaitre l'URL des fichiers qu'il contient.

  • Le code source du fichier à exécuter s'affiche dans le navigateur, ou ce dernier propose de le télécharger : le Addhandler est manquant (exemple dans le .htaccess ci-dessus). Sinon c'est le module qui n'est pas activé (a2enmod cgi).

couldn't create child process[modifier | modifier le wikicode]

Remplacer le chemin après le shebang. Par exemple :

  • #!/usr/bin/perl par #!c:/perl/perl/bin/perl.exe -w.
  • #!/usr/bin/env python par #!C:\Program Files (x86)\Python\python.exe.

End of script output before headers[modifier | modifier le wikicode]

En-tête manquante dans le contenu affiché par le script (ex : déplacer l'importation avant print "Content-Type: text/plain;charset=utf-8"). Mais cela peut aussi être dû à un message d'erreur dans le script à exécuter.

malformed header from script: Bad header:[modifier | modifier le wikicode]

L'en-tête n'est pas adaptée (ex : remplacer #print "Content-Type: text/plain;charset=utf-8" par print "Content-type: text/html\n\n" s'il y a un print "<html>" après).

Sinon consulter les logs Apache...

Références[modifier | modifier le wikicode]