Tôi có cần khởi động lại Nginx nếu tôi gia hạn (các) Chứng chỉ bảo mật của mình không?


33

Vì vậy, tôi đang thiết lập một máy chủ nginx có SSL được bật với định nghĩa máy chủ giống như:

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;

    ...
}

Bạn có ý tưởng (xin vui lòng tha thứ cho bất kỳ lỗi chính tả).

Dù sao, điều tôi đang tự hỏi là; Nếu tôi gia hạn (các) chứng chỉ của mình, có cách nào để cài đặt chúng mà không phải khởi động lại nginx không?

Ví dụ: nếu tôi sử dụng các liên kết tượng trưng từ /path/to/public/certificate/path/to/private/key, chỉ vào (các) chứng chỉ hiện tại của tôi, tôi vẫn cần phải khởi động lại nginxnếu tôi chỉ đơn giản thay đổi các liên kết này để trỏ đến các chứng chỉ mới (được gia hạn)? Có những lựa chọn thay thế?

Câu trả lời:


26

Có, tôi khá chắc chắn rằng bạn sẽ cần tải lại Nginx để chứng chỉ được gia hạn hiển thị ngày hết hạn chính xác, nhưng việc xóa bộ nhớ cache và duyệt đơn giản sẽ cho phép bạn xem điều này.

Hoặc nếu bạn thích cli, bạn luôn có thể sử dụng lệnh OpenSSL đáng tin cậy cũ:

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

Điều đó sẽ cung cấp cho bạn những ngày hiện tại trên giấy chứng nhận. Trong trường hợp của bạn, cổng sẽ là 80 thay vì 443.

Nhiều lần nginx -s reloadkhông hoạt động như mong đợi. Trên nhiều hệ thống (Debian, v.v.), bạn sẽ cần sử dụng/etc/init.d/nginx reload .

Bạn luôn có thể chỉ định tệp cấu hình trực tiếp nếu tất cả các lỗi khác đều bị lỗi nginx -c /path/to/nginx.conf.


Rất tiếc, những người nghe đó đáng lẽ phải dành cho cổng 443, thật tệ! Dù sao, cảm ơn cho câu trả lời tuyệt vời!
Harastak

8
nginx reloadvà khởi động lại Nginx là hai điều khác nhau: reloadkhông khởi động lại Nginx mà chỉ gửi tín hiệu SIGHUP. Tín hiệu SIGHUP có đủ không?
porton

11
Vâng. Gửi SIGHUP sẽ khiến nginx chuyển sang chứng chỉ được cập nhật.
tốc độ

Chức năng của echo |lệnh của bạn là gì? Nếu tôi bỏ nó ra, tôi sẽ không nhận được lời nhắc lại. Tôi muốn grep đầu ra cho notAftervà sau đó so sánh nó với ngày hiện tại, để tự spam một vài ngày trước khi chứng chỉ hết hạn.
Amedee Van Gasse

@AmedeeVanGasse echođường ống chỉ làm cho lối thoát vỏ OpenSSL trở lại sạch sẽ với Bash và trả lại đầu ra như bình thường. Điều này là cần thiết để thoát sạch để sử dụng trong các tập lệnh và cho các mục đích tự động hóa giống như bạn đang lên kế hoạch. Tôi đã triển khai nhiều tập lệnh giống như tập lệnh bạn đang lập kế hoạch sử dụng cùng chức năng cơ bản đó.
rubynorails

21

Khi nhận SIGHUPnginx sẽ tải lại cấu hình đã cập nhật, xác minh nó trong khi mở tệp nhật ký và đọc chứng chỉ SSL , sau đó tắt một cách duyên dáng các quy trình công nhân dựa trên cấu hình trước đó.

Nếu điều đó xảy ra là nginx không thể đọc một số chứng chỉ SSL, tôi sẽ tiếp tục chạy bằng cấu hình cũ hơn. Mặt khác, nó sẽ tiếp tục hoạt động và xử lý các yêu cầu bất kể bạn đã làm gì với các tệp cấu hình của mình. Ngay cả khi chúng bị hỏng, trang web của bạn vẫn sẽ mở.

Vì vậy, có, bạn không phải khởi động lại nginx và có nguy cơ đặt máy chủ của bạn ngoại tuyến trong hơn một vài giây nếu bạn muốn nginx thấy các bản cập nhật. Nó là đủ để:

sudo service nginx reload

Trong hầu hết các bản phân phối hiện tại với systemd được sử dụng theo mặc định, bạn cũng có thể tải lại nginx bằng lệnh sau:

sudo systemctl reload nginx

3
Trên Ubuntu 16 , CentOS 7 và các hệ thống khác hỗ trợ systemdbạn cũng có thể thực thi sudo systemctl reload nginx(được sudo service nginx reloadđề cập ở trên là bí danh).
Ville

@Ville bạn đúng, nhưng đó là một lệnh cần nhớ; và không có hệ thống ở khắp mọi nơi
sanmai

Tôi thích làm service nginx restart. Tôi không bao giờ cảm thấy mệt mỏi khi thấy nó hoàn thành nhanh như thế nào. Tuy nhiên, nếu đó là một công việc định kỳ và tôi sẽ không thấy bất kỳ công việc nào, tôi muốn thực hiện một số loại tải lại để tránh phá vỡ bất kỳ loại phiên liên tục hoặc hoạt động đang chờ xử lý nào có thể đang diễn ra.
Rolf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.