Apache : « AH01797: client denied by server configuration » sur le dossier icons

Un client m’a remonté que sur son site le favicon était en erreur 404, de façon incompréhensible.

Si j’essaye d’accéder au favicon avec mon navigateur, j’ai bien une erreur 404. Et dans les logs je vois :

[Fri Feb 26 11:38:36.170743 2021] [access_compat:error] [pid 11523:tid 139967505688320] [client XXX.XXX.XXX.XXX:0] AH01797: client denied by server configuration: [...]/current/favicon.ico

Pourtant le fichier favicon.ico est bien présent au bon emplacement et avec les bons droits.

 

J’ai dû pas mal chercher pour trouver la source du problème. C’est ce site qui m’a aidé.

En fait, le module alias contiens par défaut la configuration suivante :

        # We include the /icons/ alias for FancyIndexed directory listings.  If
        # you do not use FancyIndexing, you may comment this out.

        Alias /icons/ "/usr/share/apache2/icons/"

        <Directory "/usr/share/apache2/icons">
                Options FollowSymlinks
                AllowOverride None
                Require all granted
        </Directory>

Sur tous les vhosts du serveur, le dossier /icons/ est réécrit vers /usr/share/apache2/icons/, donc toutes les icônes ajoutées par le client ne sont pas accessibles.

La solution évoquée sur le site est de renommer le dossier /icons/ sur le site. Ça ne me conviens pas, parce-qu’il faut que le client modifie son site. La seule solution est de commenter ces lignes.

Apache : AH01071: Got error Primary script unknown

Lors de la création d’un vhost sur Apache, une fois le code du site importé j’ai eu l’erreur suivante dans les logs :
AH01071: Got error 'Primary script unknown\n'
Plusieurs pages du site affichaient également un File not found.

 

J’ai pas mal galéré avant de trouver l’origine du problème, et surtout comment le résoudre.

 

Le code PHP du client était exécuté via FPM, avec la directive suivante :
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/palc.fr/$1

Mais à la racine de son site, un fichier .htaccess était rempli de règles de ce style :
RewriteRule ^/gallery/index.php /phototheque.php [NC,L]
RewriteRule ^/gallery/client.php /phototheque-client.php [NC,L]

Le problème c’est que le ProxyPassMatch est exécuté avant les RewriteRule du .htaccess. Du coup, quand on demande une page PHP correspondant à une RewriteRule, Apache va d’abord essayer de l’exécuter avec FPM et retourner une erreur, puisque le fichier PHP n’existe pas.

 

La solution est de demander à Apache de n’utiliser FPM que si le fichier existe. Il faut remplacer
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/palc.fr/$1
Par :
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000/"
</FilesMatch>

Apache : SSLProtocol ignoré

J’ai rencontré un problème récemment. J’avais beau modifier la variable SSLProtocol dans n’importe quel fichier de /etc/apache2/sites-enabled/, ce n’étais jamais pris en compte.

En fait, en bas de la configuration de chaque vhost, Let’s Encrypt avait rajouté la ligne suivante :

Include /etc/letsencrypt/options-ssl-apache.conf

Il fallait donc modifier le SSLProtocol directement dans ce fichier.