Pertanyaan Nginx config ulang tanpa downtime


Saya menggunakan nginx sebagai proxy terbalik. Setiap kali saya memperbarui konfigurasi untuk digunakan

sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
sudo "kill -s HUP `cat /var/run/nginx.pid`"

Saya menghadapi downtime singkat. Bagaimana saya bisa menghindarinya?


93
2018-04-11 17:13




Apakah itu dimaksudkan sebagai perintah baris perintah? Saya belum pernah melihat seseorang membungkus seluruh perintah sudo dalam tanda kutip seperti itu, itu mungkin tidak diperlukan. - brianmearns
Hanya komentar umum: Saya pikir praktik standar / yang disarankan adalah membuat tautan lunak / simbolik untuk konfigurasi situs Anda di bawah sites-enabled, jangan menyalinnya. Tidak terkait dengan masalah khusus Anda, tetapi Anda mungkin ingin memeriksanya. - brianmearns
Anda seharusnya tidak mengalami downtime. kill HUP adalah cara untuk melakukan pemuatan ulang yang anggun di nginx. - Jonathan Vanasco


Jawaban:


Menjalankan service nginx reload atau /etc/init.d/nginx reload

Ini akan melakukan reload panas dari konfigurasi tanpa downtime. Jika Anda memiliki permintaan yang tertunda, maka akan ada proses nginx berlama-lama yang akan menangani koneksi tersebut sebelum mati, jadi ini cara yang sangat anggun untuk memuat konfigurasi.

Terkadang Anda mungkin ingin menambahkannya sudo 


153
2018-04-11 17:24



Keduanya harus melakukan persis apa yang dikatakan oleh pertanyaan: kirim SIGHUP untuk proses master nginx. Seharusnya tidak ada perbedaan. nginx.org/en/docs/control.html - Gnarfoz
Ketika saya mengeluarkan perintah di CentOS itu terus berkata "Usage / etc / init.d / nginx (start..stop ... restart..reload)" .. dan itulah bagaimana saya menggunakannya. Di dalam file /init.d/nginx saya menemukan kill -HUP cat $PIDFILE || echo -n "tidak bisa memuat ulang" - mashup
apakah Anda tahu apa perbedaannya adalah antara service nginx reloaddan nginx -s reload? Jika saya menjalankan yang pertama, saya mendapatkan output ini: Reloading nginx configuration: nginx., tetapi perubahan saya tidak diperbarui. Jika saya menjalankan yang terakhir, saya tidak mendapatkan output, tetapi perubahan saya tercermin. - Ryan Quinn
Saya baru mencoba ini setelah menambahkan log_not_found direktif tetapi menemukan bahwa saya harus benar-benar memulai kembali untuk membuatnya bekerja. Saya kira reload tidak berfungsi untuk semua arahan? - mydoghasworms


Menjalankan /usr/sbin/nginx -s reload

Lihat http://wiki.nginx.org/CommandLine untuk opsi baris perintah lainnya.


55
2017-07-27 13:46



Akhirnya, perintah yang berhasil di Debian Jessie. - danger89
Ini cara yang lebih baik. Karena server Anda tidak turun jika konfigurasi Anda memiliki kesalahan (hanya menunjukkan kesalahan dalam kasus ini). - Mir-Ismaili


Tidak, Anda salah, Anda tidak seharusnya menghadapi downtime dengan prosedur yang Anda jelaskan. (Nginx tidak hanya dapat melakukan konfigurasi ulang dengan cepat tanpa downtime, tetapi bahkan upgrade dari eksekusi dengan cepat, masih tanpa downtime.)

Sesuai http://nginx.org/docs/control.html#reconfiguration, mengirim HUP sinyal ke nginx memastikan bahwa ia melakukan restart yang anggun, dan, jika file-file konfigurasi tidak benar, seluruh prosedur ditinggalkan, dan Anda tertinggal dengan nginx seperti sebelum mengirim HUP sinyal. Tidak ada gunanya setiap downtime menjadi mungkin.

Agar nginx untuk membaca kembali file konfigurasi, sinyal HUP harus dikirim ke proses master. Proses master pertama memeriksa validitas sintaks, kemudian mencoba untuk menerapkan konfigurasi baru, yaitu, untuk membuka file log dan soket daftar baru. Jika ini gagal, ia menggulung kembali perubahan dan terus bekerja dengan konfigurasi lama.


8
2018-06-22 16:58





Biasanya, memuat kembali file konfigurasi layanan seharusnya tidak memengaruhi layanan yang berjalan. Namun, ini tergantung pada bagaimana SIGHUP sinyal diproses.

Jika layanan tertentu mengalami downtime selama pemuatan ulang, ini dapat dielakkan dengan menjalankan layanan yang sama di beberapa server lebih baik menggunakan load balancer. Dalam hal ini, Anda dapat mengambil satu server sekaligus dan memuat ulang / memulai ulang. Kemudian, dapat ditambahkan kembali setelah mengonfirmasi bahwa itu OK.


2
2018-04-11 17:24



Meskipun ini tidak secara langsung menjawab pertanyaan, ini jelas merupakan skenario praktik terbaik yang OP akan pintar untuk mengikuti untuk menghindari downtime secara umum. - Andrew M.
Detail tentang bagaimana nginx menangani sinyal yang berbeda: nginx.org/en/docs/control.html - Gnarfoz