Página de mantenimiento en nginx, mejores prácticas

13

Quiero configurar el servidor para mostrar una página de mantenimiento cuando exista. Probé este código y funciona:

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

Pero noté que se serviría con un código de estado 200, y puede causar confusión a los motores de búsqueda. Creo que la mejor práctica sería devolver un código de estado 503. En google encuentro varias páginas relevantes al respecto, como esta . Sin embargo, usan if para hacer la redirección y de acuerdo con la documentación de nginx no es seguro usar ifs.

¿Hay alguna manera de hacerlo sin usar if? ¿Es seguro de usar si en este caso?

Gracias.

NeDark
fuente

Respuestas:

7

Creo que la mejor práctica sería devolver un código de estado 500.

Creo que te refieres a 503 en lugar de 500.

usan ifpara hacer la redirección y de acuerdo con la documentación de nginx no es seguro usar ifs.

No. Sólo returnes 100% seguro dentro ifen locationcontexto.

Según la documentación de nginx , puede especificar un código de estado HTTP como último argumento para try_files. He intentado esto pero no funcionó.

quanta
fuente
21

Esto es lo que hago.

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

Si el archivo está allí, mostrará la página de mantenimiento. Una vez que elimine el archivo, volverá a la normalidad.

Miguel
fuente
1
Sí, ese es el mismo código que está en el enlace de la pregunta. En realidad, estoy preguntando si es seguro usar ifs en este caso, ya que no debe usarse de acuerdo con la documentación .
NeDark
1
Y esa misma documentación: 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 página de error de mantenimiento que mostró Mike normalmente se establece en el contexto del servidor {}.
Regan
1
Hice lo mismo, excepto que solo hice un 'return 503' sin verificar la existencia del archivo. De esa manera, puedo habilitar / deshabilitar el sitio (usando el diseño "sitios disponibles" / "sitios habilitados" de Debian) mediante la simulación y activar la página de mantenimiento.
Asfand Qazi
1
Parece que esto sería un éxito en el rendimiento: NGINX deberá verificar la existencia de un archivo para cada solicitud ...
Marc
1
Marc, no lo es, ya que los archivos de acceso común se almacenan en la memoria caché del sistema de archivos que está en la memoria.
Mike