Pagina di manutenzione su nginx, best practice


13

Voglio configurare il server per mostrare una pagina di manutenzione quando esiste. Ho provato questo codice e funziona:

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

Ma ho notato che sarebbe servito con un codice di stato 200 e può causare confusione ai motori di ricerca. Penso che la migliore pratica sarebbe quella di restituire un codice di stato 503. Su google trovo diverse pagine pertinenti al riguardo, come questa . Tuttavia, usano if per effettuare il reindirizzamento e secondo la documentazione di nginx non è sicuro usare ifs.

C'è un modo per farlo senza usare if? È sicuro da usare se in questo caso?

Grazie.

Risposte:


7

Penso che la migliore pratica sarebbe quella di restituire un codice di stato 500.

Penso che intendi 503 invece di 500.

usano ifper effettuare il reindirizzamento e secondo la documentazione di nginx non è sicuro usare ifs.

No. Solo returnè sicuro al 100% all'interno ifnel locationcontesto.

Secondo la documentazione di nginx , è possibile specificare un codice di stato HTTP come ultimo argomento di try_files. Ci ho provato ma non ha funzionato.


21

Ecco cosa faccio.

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

Se il file è presente, verrà visualizzata la pagina di manutenzione. Una volta rimosso il file, tornerai alla normalità.


1
Sì, quello è lo stesso codice presente sul link nella domanda. In realtà sto chiedendo se è sicuro usare ifs in questo caso poiché non dovrebbe essere usato secondo la documentazione .
NeDark,

1
E quella stessa documentazione: 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 pagina di errore di manutenzione mostrata da Mike è normalmente impostata nel contesto del server {}.
Regan,

1
Ho fatto lo stesso, tranne che ho appena fatto un "return 503" senza verificare l'esistenza del file. In questo modo posso semplicemente abilitare / disabilitare il sito (usando il layout "siti disponibili" / "siti abilitati" di Debian) tramite collegamento simbolico e accendere la pagina di manutenzione.
Asfand Qazi,

1
Sembra che questo sarebbe un colpo di scena: NGINX dovrà verificare l'esistenza di un file per ogni richiesta ...
Marc

1
Marc, non è perché i file a cui si accede comunemente sono archiviati nella cache del filesystem che è in memoria.
Mike,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.