Apache/Problèmes connus
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
Si les logs ne sont pas assez détaillé, on peut augmenter leur verbosité dans le vhost[1] :
LogLevel info rewrite:trace8
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.
La liste des fichiers apparait au lieu de lancer index.html
[modifier | modifier le wikicode]Remplacer
DirectoryIndex index.php
par
DirectoryIndex index.php index.html
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.
Erreurs
[modifier | modifier le wikicode]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>
403 forbidden, You don't have permission to access / on this server
[modifier | modifier le wikicode]Si 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
[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
Got error Primary script unknown
[modifier | modifier le wikicode]Le fichier .php vers lequel renvoie le vhost n'existe pas (404). Sinon il faut ajouter au vhost DirectoryIndex index.php
.
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.
Sinon, ajouter un vhost sur le port 443 en plus du 80.
cURL error 60: SSL certificate: unable to get local issuer certificate
[modifier | modifier le wikicode]Il 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
[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) / Blocage du chargement 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
[4].
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[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
[modifier | modifier le wikicode]Ce 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
[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]- ↑ 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