Apakah Saya Perlu Memulai Ulang Nginx jika Saya Memperbarui Sertifikat Keamanan Saya?

33

Jadi saya menyiapkan server nginx dengan SSL yang diaktifkan dengan definisi server seperti:

server {
    listen :80;
    listen [::]:80;
    server_name example.org;
    root /foo/bar;

    ssl on;
    ssl_certificate /path/to/public/certificate;
    ssl_certificate_key /path/to/private/key;

    ...
}

Anda mendapatkan ide (maafkan kesalahan ketik apa pun).

Bagaimanapun, yang saya ingin tahu adalah; jika saya memperbarui sertifikat saya, apakah ada cara untuk menginstalnya tanpa harus me-restart nginx?

Misalnya, jika saya menggunakan tautan simbolis dari /path/to/public/certificatedan /path/to/private/key, menunjuk ke sertifikat saya saat ini, apakah saya masih perlu memulai kembali nginxjika saya hanya perlu mengubahnya untuk menunjuk ke sertifikat yang baru (diperbarui)? Apakah ada alternatif?

Haravikk
sumber

Jawaban:

26

Ya, saya cukup yakin Anda harus memuat ulang Nginx agar sertifikat yang diperbarui untuk menampilkan tanggal kedaluwarsa yang benar, tetapi pembersihan dan penelusuran cache yang sederhana memungkinkan Anda untuk melihatnya.

Atau jika Anda lebih suka cli, Anda selalu bisa menggunakan perintah OpenSSL yang terpercaya:

echo | openssl s_client -connect your.domain.com:443 | openssl x509 -noout -dates

Itu akan memberi Anda tanggal saat ini pada sertifikat. Dalam kasus Anda port akan menjadi 80, bukan 443.

Banyak kali nginx -s reloadtidak bekerja seperti yang diharapkan. Pada banyak sistem (Debian, dll.), Anda harus menggunakan /etc/init.d/nginx reload.

Anda selalu dapat menentukan file konfigurasi secara langsung jika semuanya gagal, oleh nginx -c /path/to/nginx.conf.

rubynorails
sumber
Aduh, mereka yang mendengarkan seharusnya untuk port 443, salahku! Bagaimanapun, terima kasih atas jawaban yang bagus!
Haravikk
8
nginx reloaddan me-restart Nginx adalah dua hal yang berbeda: reloadtidak me-restart Nginx tetapi hanya mengirimkannya sinyal SIGHUP. Apakah sinyal SIGHUP cukup?
porton
11
Iya nih. Mengirim SIGHUP akan menyebabkan nginx beralih ke sertifikat yang diperbarui.
rspeed
Apa fungsi dari echo |perintah Anda? Jika saya tinggalkan, saya tidak mendapatkan prompt kembali. Saya ingin menerima output untuk notAfterkemudian membandingkannya dengan tanggal saat ini, dengan spam sendiri beberapa hari sebelum sertifikat berakhir.
Amedee Van Gasse
@AmedeeVanGasse echopipa hanya membuat shell OpenSSL keluar dengan bersih kembali ke Bash dan mengembalikan output seperti biasa. Ini diperlukan agar jalan keluar yang bersih untuk digunakan dalam skrip dan untuk tujuan otomatisasi sepertinya Anda berencana. Saya telah mengimplementasikan banyak skrip seperti yang Anda rencanakan menggunakan fungsi dasar yang sama.
rubynorails
21

Saat menerima SIGHUPnginx akan memuat ulang konfigurasi yang diperbarui, verifikasi saat membuka file log dan membaca sertifikat SSL , kemudian dengan anggun mematikan proses pekerja dengan mengandalkan konfigurasi sebelumnya.

Jika nginx tidak dapat membaca beberapa sertifikat SSL, saya akan terus berjalan menggunakan konfigurasi yang lebih lama. Jika tidak, itu akan terus berfungsi dan memproses permintaan apa pun yang Anda lakukan pada file konfigurasi Anda. Meskipun rusak, situs web Anda akan tetap terbuka.

Jadi ya, Anda tidak perlu me-restart nginx dan berisiko mematikan server Anda selama lebih dari beberapa detik jika Anda ingin nginx melihat sertifikat yang diperbarui. Seharusnya cukup untuk:

sudo service nginx reload

Dalam kebanyakan distribusi saat ini dengan systemd yang digunakan secara default, Anda juga dapat memuat ulang nginx dengan perintah berikut:

sudo systemctl reload nginx
sanmai
sumber
3
Di Ubuntu 16 , CentOS 7 , dan sistem lain yang mendukung systemdAnda juga dapat mengeksekusi sudo systemctl reload nginx(yang sudo service nginx reloaddisebutkan di atas alias).
Ville
@Ville Anda benar, tapi itu satu perintah lagi yang perlu diingat; dan tidak ada systemd di mana
sanmai
Saya suka melakukannya service nginx restart. Saya tidak pernah bosan melihat seberapa cepat itu selesai. Namun, jika itu dalam pekerjaan cron, dan saya tidak akan melihatnya, saya lebih suka melakukan semacam memuat ulang untuk menghindari melanggar segala jenis sesi persisten atau operasi tertunda yang mungkin sedang berlangsung.
Rolf