ฉันต้องเริ่มต้น Nginx ใหม่หรือไม่หากฉันต่ออายุใบรับรองความปลอดภัยของฉัน


33

ดังนั้นฉันตั้งค่าเซิร์ฟเวอร์ nginx ด้วย SSL ที่เปิดใช้งานด้วยข้อกำหนดเซิร์ฟเวอร์ดังนี้:

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;

    ...
}

คุณได้รับแนวคิด (โปรดยกโทษให้กับการพิมพ์ผิด ๆ )

อย่างไรก็ตามสิ่งที่ฉันสงสัยคือ; หากฉันต่ออายุใบรับรองจะมีวิธีในการติดตั้งโดยไม่ต้องรีสตาร์ท nginx หรือไม่

ตัวอย่างเช่นหากฉันต้องใช้ลิงก์สัญลักษณ์จาก/path/to/public/certificateและ/path/to/private/keyชี้ไปที่ใบรับรองปัจจุบันของฉันฉันจะต้องเริ่มต้นใหม่หรือไม่nginxหากฉันต้องเปลี่ยนสิ่งเหล่านี้ให้ชี้ไปที่ใบรับรอง (ต่ออายุ) ใหม่หรือไม่ มีทางเลือกอื่นอีกไหม?

คำตอบ:


26

ใช่ฉันค่อนข้างมั่นใจว่าคุณจะต้องโหลด Nginx อีกครั้งเพื่อให้ใบรับรองที่ต่ออายุเพื่อแสดงวันหมดอายุที่ถูกต้อง แต่การล้างแคชและการเรียกดูแบบง่ายควรอนุญาตให้คุณดูสิ่งนี้

หรือถ้าคุณชอบ cli คุณสามารถใช้คำสั่ง OpenSSL แบบเก่าที่เชื่อถือได้:

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

นั่นจะทำให้คุณมีวันที่ปัจจุบันในใบรับรอง ในกรณีของคุณพอร์ตจะเท่ากับ 80 แทนที่จะเป็น 443

หลายครั้งnginx -s reloadไม่ทำงานตามที่คาดไว้ ในระบบจำนวนมาก (เด ฯลฯ ) /etc/init.d/nginx reloadคุณจะต้องใช้

nginx -c /path/to/nginx.confคุณสามารถระบุการตั้งค่าไฟล์โดยตรงหากทั้งหมดอื่นล้มเหลวโดย


อ๊ะผู้ฟังเหล่านั้นน่าจะเป็นพอร์ต 443 ของฉัน! อย่างไรก็ตามขอบคุณสำหรับคำตอบที่ยอดเยี่ยม!
Haravikk

8
nginx reloadและการรีสตาร์ท Nginx เป็นสองสิ่งที่แตกต่างกัน: reloadไม่ต้องรีสตาร์ท Nginx แต่ส่งสัญญาณ SIGHUP เท่านั้น สัญญาณ SIGHUP เพียงพอหรือไม่
porton

11
ใช่. การส่ง SIGHUP จะทำให้ nginx เปลี่ยนเป็นใบรับรองที่อัปเดต
rspeed

หน้าที่ของecho |คุณคืออะไร? ถ้าฉันปล่อยมันออกไปฉันจะไม่ได้รับการตอบกลับ ฉันต้องการ grep ผลลัพธ์สำหรับnotAfterแล้วเปรียบเทียบกับวันที่ปัจจุบันเพื่อสแปมตัวเองสองสามวันก่อนที่ใบรับรองจะหมดอายุ
Amedee Van Gasse

@AmedeeVanGasse echoไปป์เพียงแค่ทำให้เชลล์ OpenSSL ออกจากระบบกลับสู่ Bash อย่างหมดจดและส่งคืนเอาต์พุตตามปกติ สิ่งนี้จำเป็นสำหรับการออกจากระบบแบบสะอาดเพื่อใช้ในสคริปต์และเพื่อวัตถุประสงค์อัตโนมัติเช่นดูเหมือนว่าคุณกำลังวางแผน ฉันได้ติดตั้งสคริปต์มากมายเช่นเดียวกับที่คุณวางแผนไว้ว่าจะใช้ฟังก์ชั่นพื้นฐานแบบเดียวกัน
rubynorails

21

เมื่อได้รับSIGHUPnginx จะโหลดการกำหนดค่าที่อัปเดตใหม่ให้ตรวจสอบในขณะที่เปิดล็อกไฟล์และอ่านใบรับรอง SSLจากนั้นปิดกระบวนการของผู้ปฏิบัติงานโดยอาศัยการกำหนดค่าก่อนหน้านี้

หากเกิดขึ้นที่ nginx ไม่สามารถอ่านใบรับรอง SSL บางตัวฉันจะยังคงทำงานต่อไปโดยใช้การกำหนดค่าที่เก่ากว่า มิเช่นนั้นจะยังคงทำงานและดำเนินการตามคำขอไม่ว่าคุณจะทำอะไรกับไฟล์ปรับแต่งของคุณ แม้ว่าเว็บไซต์ของคุณจะเสียหาย แต่เว็บไซต์ของคุณก็ยังเปิดอยู่

ใช่คุณไม่ต้องรีสตาร์ท nginx และเสี่ยงที่จะทำให้เซิร์ฟเวอร์ของคุณออฟไลน์นานกว่าสองสามวินาทีถ้าคุณต้องการให้ nginx เห็นการปรับปรุงที่อัพเดท มันควรจะเพียงพอที่จะ:

sudo service nginx reload

ในการกระจายปัจจุบันส่วนใหญ่ที่มี systemd ใช้โดยค่าเริ่มต้นคุณยังสามารถโหลด nginx ด้วยคำสั่งต่อไปนี้:

sudo systemctl reload nginx

3
บนUbuntu 16 , CentOS 7และระบบอื่น ๆ ที่สนับสนุนsystemdคุณสามารถดำเนินการได้sudo systemctl reload nginx(ซึ่งได้sudo service nginx reloadกล่าวถึงข้างต้นแล้ว)
วิลล์

@Ville ถูกต้อง แต่นั่นเป็นอีกคำสั่งหนึ่งที่ต้องจดจำ และไม่มี systemd ทุกที่
sanmai

service nginx restartฉันรักที่จะทำ ฉันไม่เคยเบื่อที่จะเห็นว่ามันเสร็จสิ้นเร็วแค่ไหน อย่างไรก็ตามถ้ามันอยู่ในงาน cron และฉันจะไม่เห็นมันเลยฉันควรจะทำการรีโหลดบางอย่างเพื่อหลีกเลี่ยงการทำลายเซสชั่นถาวรหรือการดำเนินการที่ค้างอยู่ซึ่งอาจจะดำเนินต่อไป
Rolf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.