Page de maintenance sur nginx, meilleures pratiques

13

Je souhaite configurer le serveur pour afficher une page de maintenance lorsqu'elle existe. J'ai essayé ce code et fonctionne:

location / {
    try_files /maintenance.html $uri $uri/ @codeigniter;
}

Mais j'ai remarqué qu'il serait servi avec un code de statut 200, et cela peut causer de la confusion aux moteurs de recherche. Je pense que la meilleure pratique serait de renvoyer un code d'état 503. Sur google, je trouve plusieurs pages pertinentes à ce sujet, comme celle-ci . Cependant, ils utilisent if pour effectuer la redirection et selon la documentation de nginx, il n'est pas sûr d'utiliser ifs.

Existe-t-il un moyen de le faire sans utiliser if? Est-ce sûr à utiliser si dans ce cas?

Merci.

NeDark
la source

Réponses:

7

Je pense que la meilleure pratique serait de renvoyer un code de statut 500.

Je pense que vous voulez dire 503 au lieu de 500.

ils utilisent ifpour effectuer la redirection et selon la documentation de nginx, il n'est pas sûr d'utiliser ifs.

Non seulement returnest sûr à 100% à l' intérieur ifdans le locationcontexte.

Selon la documentation de nginx , vous pouvez spécifier un code d'état HTTP comme dernier argument de try_files. J'ai essayé ça mais ça n'a pas marché.

quanta
la source
21

Voici ce que je fais.

            if (-f $document_root/maintenance.html) {
                    return 503;
            }
            error_page 503 @maintenance;
            location @maintenance {
                    rewrite ^(.*)$ /maintenance.html break;
            }

Si le fichier est là, il affichera la page de maintenance. Une fois le fichier supprimé, vous reviendrez à la normale.

Mike
la source
1
Oui, c'est le même code qui se trouve sur le lien dans la question. Je demande en fait s'il est sûr d'utiliser ifs dans ce cas car il ne devrait pas être utilisé conformément à la documentation .
NeDark
1
Et cette même documentation: In some cases it's also possible to move ifs to server level (where it's safe as only other rewrite module directives are allowed within it).La page d'erreur de maintenance comme Mike l'a montré est normalement définie dans le contexte du serveur {}.
Regan
1
J'ai fait la même chose, sauf que je viens de faire un «retour 503» sans vérifier l'existence du fichier. De cette façon, je peux simplement activer / désactiver le site (en utilisant la mise en page "sites disponibles" / "sites activés" de Debian) en créant un lien symbolique et en ouvrant la page de maintenance.
Asfand Qazi
1
Des sons comme celui-ci seraient un hit de performance: NGINX devra vérifier l'existence d'un fichier pour chaque demande ...
Marc
1
Marc, ce n'est pas le cas, car les fichiers couramment utilisés sont stockés dans le cache du système de fichiers qui est en mémoire.
Mike