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

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 qu’il utilise des pages d’erreurs personnalisées sous Ubuntu 14.04.

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 https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 (guide de configuration initiale pour Ubuntu 14.04). . 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-ubuntu-14- 04 [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’erreurs personnalisées dans le répertoire + / var / www / html où l’installation d’Abunt Ubuntu définit la racine de son 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. Ouvrez le fichier d’hôte virtuel dans le répertoire + / etc / apache2 / sites-enabled + que vous souhaitez configurer. Nous allons utiliser le fichier de blocage de serveur par défaut appelé + 000-default.conf +, mais vous devez ajuster vos propres blocs de serveur si vous utilisez un fichier autre que celui par défaut:

sudo nano /etc/apache2/sites-enabled/000-default.conf

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. Cela peut être défini dans l’hôte virtuel actuellement défini. 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/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined






</VirtualHost>

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/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>

   . . .

   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












</VirtualHost>

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 de l’hôte virtuel. Envoyez les demandes de + / proxytest + au port 9000 sur la machine locale (où aucun service n’est en cours d’exécution):

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>

   . . .

   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>


</VirtualHost>

Enregistrez et fermez le fichier lorsque vous avez terminé.

Maintenant, activez les modules + mod_proxy + et + mod_proxy_http + en tapant:

sudo a2enmod proxy
sudo a2enmod proxy_http

Redémarrer Apache et tester vos pages

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

sudo apache2ctl configtest

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

sudo service apache2 restart

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. Vous pouvez désactiver les modules proxy si vous n’avez pas besoin de les utiliser ailleurs:

sudo a2dismod proxy
sudo a2dismod proxy_http

Redémarrez à nouveau le serveur pour implémenter ces modifications:

sudo service apache2 restart

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.