Halaman pemeliharaan di nginx, praktik terbaik

13

Saya ingin mengkonfigurasi server untuk menampilkan halaman pemeliharaan ketika ada. Saya mencoba kode ini dan berfungsi:

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

Tapi saya perhatikan itu akan dilayani dengan 200 kode status, dan itu dapat menyebabkan kebingungan pada mesin pencari. Saya pikir praktik terbaik adalah mengembalikan kode status 503. Di google saya menemukan beberapa halaman yang relevan tentang itu, seperti ini . Namun, mereka menggunakan jika untuk melakukan redirect dan menurut dokumentasi nginx itu tidak aman untuk digunakan seandainya.

Apakah ada cara melakukannya tanpa menggunakan if? Apakah aman digunakan jika dalam kasus ini?

Terima kasih.

NeDark
sumber

Jawaban:

7

Saya pikir praktik terbaik adalah mengembalikan kode status 500.

Saya pikir maksud Anda 503 bukannya 500.

mereka gunakan ifuntuk melakukan redirect dan menurut dokumentasi nginx itu tidak aman untuk digunakan seandainya.

Tidak Hanya returnadalah 100% aman di dalam ifdi locationkonteks.

Menurut dokumentasi nginx , Anda dapat menentukan kode status HTTP sebagai argumen terakhir try_files. Saya sudah mencoba ini tetapi tidak berhasil.

kuanta
sumber
21

Inilah yang saya lakukan.

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

Jika file ada di sana itu akan menampilkan halaman pemeliharaan. Setelah Anda menghapus file, Anda akan kembali normal.

Mike
sumber
1
Ya, itu kode yang sama dengan yang ada di tautan dalam pertanyaan. Saya sebenarnya bertanya apakah aman untuk digunakan ifdalam hal ini karena tidak boleh digunakan sesuai dengan dokumentasi .
NeDark
1
Dan dokumentasi yang sama: 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).Error_page pemeliharaan seperti yang ditunjukkan Mike biasanya diatur dalam konteks server {}.
Regan
1
Saya melakukan hal yang sama kecuali hanya melakukan 'return 503' tanpa memeriksa keberadaan file. Dengan begitu saya hanya bisa mengaktifkan / menonaktifkan situs (menggunakan tata letak Debian "tersedia situs" / "diaktifkan situs") dengan menghubungkan dan mengaktifkan halaman pemeliharaan.
Asfand Qazi
1
Kedengarannya seperti ini akan menjadi hit kinerja: NGINX perlu memeriksa keberadaan file untuk setiap permintaan ...
Marc
1
Marc, itu bukan karena file yang biasa diakses disimpan dalam cache filesystem yang ada di memori.
Mike