Est-il possible de servir une page d'erreur "Bad Gateway" personnalisée dans Nginx?
Semblable à avoir 404 pages personnalisées.
Cela ressemble à la configuration des pages personnalisées 404. Voici ce que j'ai.
#site-wide error pages
error_page 404 /404.html;
error_page 500 502 503 504 /500.html;
Trois éléments doivent être en place pour que votre page d'erreur personnalisée s'affiche à la place de l'erreur générique «Bad Gateway».
Vous devez créer un fichier html nommé quelque chose comme "500.html" et le placer à la racine. Dans le cas de Rails situés derrière Nginx, cela signifie qu'il doit être placé à public/500.html.
Vous devez avoir une ligne dans votre fichier de configuration qui pointe au moins les 502 erreurs sur cette page 500.html comme ceci:
error_page 502 /500.html;
Vous devez avoir un bloc d’emplacement pour /500.html dans votre fichier de configuration. Si votre racine est déjà définie, ce bloc peut être vide. Mais le bloc doit néanmoins exister.
location /500.html{
}
Oui c'est possible
Tapez ceci dans votre terminal
cd /etc/nginx
Sudo nano nginx.conf
et sous http ajouter ces lignes
error_page 500 Path_to_your_custom_error_page;
error_page 503 Path_to_your_custom_error_page;
error_page 504 Path_to_your_custom_error_page;
Maintenant, redémarrez nginx en tapant cette commande:
Sudo service nginx restart
Bingo maintenant, vous pouvez voir un message d'erreur personnalisé sur l'erreur de passerelle
La question ne dit pas, mais il est assez courant de rencontrer ce problème lorsque les API sont derrière un proxy nginx, alors dans ce cas, vous voulez que la réponse soit JSON, pas HTML.
Mon approche préférée consiste simplement à utiliser la fonctionnalité de redirection de la directive error_page
pour rediriger vers une page d'erreur du même site:
error_page 502 503 $scheme://$server_name/500.json;
C'est une ligne, vous pouvez réutiliser le même 500.json
pour différents location
', et il n'est pas nécessaire de créer un mystérieux vide location
. Vous placez votre message d'erreur dans le fichier 500.json
à la racine de votre site. Je suppose que vous avez déjà une directive location / {...}
qui sert des fichiers statiques.
Vous pouvez bien sûr utiliser cette même approche pour servir également une page d'erreur HTML.
en utilisant debian (9.3 stretch), j’ai suivi les étapes suivantes:
créer /var/www/html/502.html
avec le contenu de la page d'erreur 502
éditer /etc/nginx/sites-enabled/mywebsite.conf
donc ça ressemble à ça:
server {
listen 80; listen [::]:80;
server_name www.mywebsite.com;
error_page 502 /502.html;
location /502.html {
root /var/www/html;
}
}
service nginx restart