Apache/Problèmes connus

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 :

Terminal

 

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

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

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

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

403 forbidden, client denied by server configuration

modifier

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

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

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

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

Installer le module :

sudo apt-get install apache2-suexec-custom

suEXEC is disabled

modifier

Vérifier que le module est activé.

Erreurs vhost

modifier

Les 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)

modifier

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

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

curl: (60) SSL certificate problem: self signed certificate

modifier

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

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

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

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

Dans les logs SSL

modifier

RSA certificate configured for 127.0.0.1:443 does NOT include an ID which matches the server name

modifier

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

CSR contains unsupported extensions

modifier

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

Server should be SSL-aware but has no certificate configured

modifier

Réinstaller clé SSL.

Init: Unable to read server certificate from file ...csr

modifier

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

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

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

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

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

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

Inopérant

modifier

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

Il existe une redirection circulaire.

Erreurs CGI

modifier

Error 500 Erreur du serveur!

modifier

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

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

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

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

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