Comment configurer Apache pour qu’il utilise des pages d’erreur personnalisées sur CentOS 7

introduction

Apache est le serveur Web le plus populaire au monde. Il est bien pris en charge, riche en fonctionnalités et flexible. Lors de la conception de vos pages Web, il est souvent utile de personnaliser chaque élément de contenu visible par vos utilisateurs. Cela inclut les pages d’erreur pour les demandes de contenu non disponible. Dans ce guide, nous montrerons comment configurer Apache pour utiliser des pages d’erreur personnalisées sur CentOS 7.

Conditions préalables

Pour commencer à utiliser ce guide, vous aurez besoin d’un utilisateur non root avec les privilèges + sudo +. Vous pouvez configurer un utilisateur de ce type en suivant notre initialisation du guide de configuration initiale de CentOS 7. Apache devra également être installé sur votre système. Apprenez à configurer ceci en suivant la première étape de https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lp-lamp-stack-on-centos-7 [ ce guide].

Création de vos pages d’erreur personnalisées

Nous allons créer quelques pages d’erreur personnalisées à des fins de démonstration, mais vos pages personnalisées seront évidemment différentes.

Nous placerons nos pages d’erreur personnalisées dans le répertoire + / var / www / html où l’installation de CentOS Apache définit la racine du document par défaut. Nous allons créer une page pour les erreurs 404 appelée + custom_404.html + et une autre pour les erreurs générales de niveau 500, appelée + custom_50x.html +. Vous pouvez utiliser les lignes suivantes si vous ne faites que tester. Sinon, placez votre propre contenu à ces emplacements:

echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/html/custom_404.html
echo "<p>I have no idea where that file is, sorry.  Are you sure you typed in the correct URL?</p>" | sudo tee -a /var/www/html/custom_404.html
echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html
echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /var/www/html/custom_50x.html

Nous avons maintenant deux pages d’erreur personnalisées que nous pouvons utiliser lorsque les demandes des clients génèrent des erreurs différentes.

Configuration d’Apache pour utiliser vos pages d’erreur

Maintenant, il suffit de dire à Apache que ces pages doivent être utilisées chaque fois que les conditions d’erreur correctes se produisent. Nous pouvons créer un nouveau fichier de configuration dans le répertoire + / etc / httpd / conf.d + où Apache lit les extraits de configuration. Nous allons appeler le nouveau fichier + custom_errors.conf +:

sudo nano /etc/httpd/conf.d/

Nous pouvons maintenant indiquer à Apache nos pages d’erreur personnalisées.

Erreurs directes vers les bonnes pages personnalisées

Nous pouvons utiliser la directive + ErrorDocument + pour associer chaque type d’erreur à une page d’erreur associée. Fondamentalement, nous devons simplement mapper le code de statut http pour chaque erreur sur la page que nous souhaitons afficher lorsque cela se produit.

Pour notre exemple, le mappage des erreurs ressemblera à ceci:

/etc/httpd/conf.d/custom_errors.conf

Cette modification suffit à elle seule à servir les pages d’erreur personnalisées lorsque les erreurs spécifiées se produisent.

Cependant, nous ajouterons un ensemble supplémentaire de configurations afin que nos pages d’erreur ne puissent pas être demandées directement par les clients. Cela peut éviter certaines situations étranges où le texte d’une page fait référence à une erreur, mais dont l’état http est «200» (indiquant qu’une demande a été acceptée).

Répondez avec 404 lorsque des pages d’erreur sont directement demandées

Pour implémenter ce comportement, nous devrons ajouter un bloc + Fichiers + pour chacune de nos pages personnalisées. À l’intérieur, nous pouvons tester si la variable d’environnement + REDIRECT_STATUS + est définie. Cela ne devrait être défini que lorsque la directive + ErrorDocument + traite une requête. Si la variable d’environnement est vide, nous générons une erreur 404:

/etc/httpd/conf.d/custom_errors.conf

ErrorDocument 404 /custom_404.html
ErrorDocument 500 /custom_50x.html
ErrorDocument 502 /custom_50x.html
ErrorDocument 503 /custom_50x.html
ErrorDocument 504 /custom_50x.html

Lorsque les clients demandent directement les pages d’erreur, une erreur 404 se produira car la variable d’environnement correcte n’est pas définie.

Configurer le test pour les erreurs de niveau 500

Nous pouvons facilement produire 404 erreurs pour tester notre configuration en demandant un contenu qui n’existe pas. Pour tester les erreurs de niveau 500, nous devons configurer une passe proxy factice afin de nous assurer que les pages correctes sont renvoyées.

Ajoutez une directive + ProxyPass + au bas du fichier. Envoyez les demandes de + / proxytest + au port 9000 sur la machine locale (où aucun service n’est en cours d’exécution):

/etc/httpd/conf.d/custom_errors.conf

ErrorDocument 404 /custom_404.html
ErrorDocument 500 /custom_50x.html
ErrorDocument 502 /custom_50x.html
ErrorDocument 503 /custom_50x.html
ErrorDocument 504 /custom_50x.html

<Files "custom_404.html">
   <If "-z %{ENV:REDIRECT_STATUS}">
       RedirectMatch 404 ^/custom_404.html$
   </If>
</Files>

<Files "custom_50x.html">
   <If "-z %{ENV:REDIRECT_STATUS}">
       RedirectMatch 404 ^/custom_50x.html$
   </If>
</Files>

Enregistrez et fermez le fichier lorsque vous avez terminé.

Redémarrer Apache et tester vos pages

Testez votre fichier de configuration pour les erreurs de syntaxe en tapant:

sudo apachectl configtest

Traitez tous les problèmes signalés. Lorsque vos fichiers ne contiennent aucune erreur de syntaxe, redémarrez Apache en tapant:

sudo systemctl restart httpd

Maintenant, lorsque vous accédez au domaine ou à l’adresse IP de votre serveur et demandez un fichier inexistant, vous devriez voir la page 404 que nous avons configurée:

http:///thiswillerror

image: https: //assets.digitalocean.com/articles/nginx_custom_error_1404/custom_404.png [apache personnalisé 404]

Lorsque vous vous rendez à l’emplacement que nous avons configuré pour le faux proxy, nous recevons une erreur «Service 503 indisponible» avec notre page personnalisée de niveau 500:

http:///proxytest

image: https: //assets.digitalocean.com/articles/nginx_custom_error_1404/custom_50x.png [apache custom 50x]

Vous pouvez maintenant revenir en arrière et supprimer la fausse ligne de passe de proxy de votre configuration Apache.

Conclusion

Vous devriez maintenant servir des pages d’erreur personnalisées pour votre site. C’est un moyen simple de personnaliser l’expérience de vos utilisateurs, même en cas de problème. Une suggestion pour ces pages est d’inclure des liens vers des endroits où ils peuvent aller pour obtenir de l’aide ou plus d’informations. Dans ce cas, assurez-vous que les destinations de lien sont accessibles même lorsque les erreurs associées se produisent.