4 votes

Page d'erreur statique servie par nginx lorsque mon application est hors service

Si mon application (Rails) est en panne ou subit une maintenance de la base de données ou autre, j'aimerais spécifier au niveau de nginx de servir une page statique. Ainsi, chaque URL comme http://example.com/ * doit servir un fichier html statique, comme /var/www/example/foo.html.

Essayer de spécifier cela dans ma configuration nginx me donne des crises et des boucles infinies et ainsi de suite.

J'essaie des choses comme

location / {
  root /var/www/example;
  index foo.html;
  rewrite ^/.+$ foo.html;
}

Comment faire pour que chaque URL de votre domaine serve un seul fichier statique ?

5voto

Christopher Perrin Points 4721

Je ne suis pas sûr à 100% mais si le serveur Rails échoue, il y a une erreur 500. Vous pourriez peut-être utiliser la fonction page d'erreur comme

error_page 500 /staticpage.html

4voto

Christopher Perrin Points 4721

Ajoutez deux emplacements comme ceci :

location = /foo.htm {
  root /var/www/example;
  index foo.html;
}

location / {
  rewrite ^/.+$ /foo.htm;
}

3voto

cadmi Points 6598

Utilisez l'emplacement nommé, cela ne change pas l'URI pendant la redirection.

Cet extrait traite la situation "Rails est en panne".

error_page 504 @rubydown; # 504 - gateway timeout

location @rubydown {
    internal;
    root /var/www;
    rewrite ^ /504.html break;
}

Pour la notification de maintenance, vous pouvez utiliser quelque chose de similaire dans l'emplacement de la racine ...

location / {
    root /var/www;
    try_files /maintaince.html @rails;
}

location @rails {
    internal;
    proxy_pass http://rails.backend;
    # blablabla proxy_pass setting for Rails
}

Créer le fichier /var/www/maintaince.html.tmpl, écrire le texte désiré. Et avant le travail de maintenance, créez un lien similaire ln -s /var/www/maintaince.html.tmpl /var/www/maintaince.html ou simplement renommer le fichier. Lorsque le travail de maintenance est terminé, supprimez le simlink ou renommez le fichier.

2voto

Pothi Kalimuthu Points 5514

Ce qui suit devrait rediriger toutes les demandes vers /var/www/example/foo.html .

location / {
  root /var/www/example;
  index foo.html;
  # In the following try\_files directive, the request will never reach =404.
  try\_files /foo.html =404;
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X