Apache/Problèmes connus
Logs
modifierContrairement à 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
Si les logs ne sont pas assez détaillé, on peut augmenter leur verbosité dans le vhost[1] :
LogLevel info rewrite:trace8
Lecture seule
modifierS'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.
La liste des fichiers apparait au lieu de lancer index.html
modifierRemplacer
DirectoryIndex index.php
par
DirectoryIndex index.php index.html
Les fonctions PHP s'affichent sur la page au lieu de s'exécuter
modifierSi 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.
Erreurs
modifier403 forbidden, client denied by server configuration
modifierCe 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>
403 forbidden, You don't have permission to access / on this server
modifierSi les logs parlent de liens symboliques : Too many levels of symbolic links ou Symbolic link not allowed or link target not accessible, remplacer le chemin du site vers lequel pointe le vhost par un dossier qui n'est pas un lien symbolique.
Si les logs parlent de No matching DirectoryIndex (index.html) found, c'est certainement que l'index.php ne s'exécute pas parce que PHP est mal configuré.
Configuration error: No MPM loaded
modifierRestaurer 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
modifierIl 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
modifierInstaller le module :
sudo apt-get install apache2-suexec-custom
suEXEC is disabled
modifierVérifier que le module est activé.
Erreurs vhost
modifierLes problèmes suivants peuvent survenir lors des relances Apache.
Invalid command 'SuexecUserGroup'
modifier
Vérifier que le module est activé.
apache2: bad user name Utilisateur1
modifier
Un utilisateur Unix appelé dans la configuration n'existe pas. Il faut donc le créer :
useradd Utilisateur1
apache2: bad group name Groupe1
modifier
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
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
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
Got error Primary script unknown
modifier
Le fichier .php vers lequel renvoie le vhost n'existe pas (404). Sinon il faut ajouter au vhost DirectoryIndex index.php
.
Erreurs HTTPS
modifierÉ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)
modifierLe 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
modifierIl faut refaire comme il faut la configuration Apache ci-dessus.
curl: (60) SSL certificate problem: self signed certificate
modifierC'est que la connexion fonctionne, les visiteurs doivent juste acquitter le message de leur navigateur Cette connexion n'est pas certifiée.
Sinon, ajouter un vhost sur le port 443 en plus du 80.
cURL error 60: SSL certificate: unable to get local issuer certificate
modifierIl faut signer son certificat avec un autre[2].
Si l'erreur vient de PHP, il faut ensuite renseigner le certificat CA dans deux champs du php.ini[3].
Enter passphrase for SSL/TLS keys for à chaque relance Apache
modifierVé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) / Blocage du chargement du contenu mixte actif (mixed active content)
modifierIl faut remplacer HTTP par HTTPS dans le code source du site Web.
Dans les logs SSL
modifierRSA certificate configured for 127.0.0.1:443 does NOT include an ID which matches the server name
modifierIl faut générer la clé en utilisant un FQDN.
CSR contains unsupported extensions
modifierLe 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
modifierServer should be SSL-aware but has no certificate configured
modifierRéinstaller clé SSL.
Init: Unable to read server certificate from file ...csr
modifierLe .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?
modifierIl 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
[4].
Certificate and private key do not match
modifierLe certificat doit être un fichier .pem et la clé .key. Il est possible de le vérifier avec la commande suivante[5] :
$ (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
AH00016: Configuration failed
modifierCe message peut survenir au redémarrage d'Apache si un vhost est incorrect. Par exemple si SSLCertificateFile ne correspond à pas SSLCertificateKeyFile.
AH01909: nomdedomaine.fr:443:0 server certificate does NOT include an ID which matches the server name
modifierLe 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
modifierSoit 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
modifierInopérant
modifierSi 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.
modifierIl existe une redirection circulaire.
Erreurs CGI
modifierError 500 Erreur du serveur!
modifierRemplacer 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
modifierLister 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
modifierRemplacer 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
modifierEn-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:
modifierL'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- ↑ https://httpd.apache.org/docs/2.4/fr/logs.html
- ↑ https://github.com/x3rus/training/blob/master/setup-un-CA/01-introduction.md
- ↑ https://openclassrooms.com/forum/sujet/configurer-le-fichier-curlhttpclient
- ↑ https://www.certificats-ssl.com/support/Installation-dun-certificat-avec-Apache-httpd.html
- ↑ http://stackoverflow.com/questions/23652680/postfix-cannot-get-rsa-private-key-from-file-etc-ssl-private-server-key-disabl