เซิฟเวอร์:
ฉันใช้ Nginx เป็น ingress-proxy สำหรับเซิร์ฟเวอร์ของฉัน Nginx ทำงานภายในคอนเทนเนอร์ Docker
นักเทียบท่า-compose.yml:
nginx_ingress:
ภาพ: nginx: ล่าสุด
พอร์ต:
- "80:80"
- "443:443"
เครือข่าย:
ระดับแนวหน้า: {}
ชั้นหลัง:
ipv4_address: 172.28.1.1
รีสตาร์ท: เสมอ
ปริมาณ:
- /var/lib/my-server/config/nginx_ingress:/etc/nginx/conf.d
- /var/lib/my-server/data/certbot/conf:/etc/letsencrypt
- /var/lib/my-server/data/certbot/www:/var/www/certbot
คำสั่ง: "/bin/sh -c ' while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
เนื่องจากฉันจัดการใบรับรองหลายใบด้วยคอนเทนเนอร์อื่น ฉันจึงต้องการให้ Nginx โหลดการกำหนดค่าใหม่ทุกๆ 6 ชั่วโมงอย่างสง่างาม
แนวคิดคือฉันสามารถจัดการใบรับรองทั้งหมดของฉันโดยไม่ขึ้นกับคอนเทนเนอร์อื่น ฉันไม่ต้องการให้สิ่งใดทำงานบนโฮสต์ของฉัน (ไม่มี cronjob) และฉันไม่ต้องการรวม nginx-proxy-container กับคอนเทนเนอร์ใบรับรองของฉัน ฉันต้องการให้จิ๊กซอว์ทุกชิ้นทำงานอย่างอิสระ
(ฉันได้แนวคิดจากบทช่วยสอนนี้: https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71)
ปัญหา:
บางครั้งพร็อกซี (nginx) หยุดทำงาน ในขณะที่คอนเทนเนอร์ Docker นั้นทำงานต่อไป
บันทึกแสดงสิ่งต่อไปนี้:
...
25/2021/10 05:51:42 [ประกาศ] 1#1: รับสัญญาณ 3 (SIGQUIT) กำลังปิด
25/10/2021 05:51:42 [ประกาศ] 12#12: ปิดตัวลงอย่างสวยงาม
25/2021/10 05:51:42 [ประกาศ] 12#12: กำลังออก
25/10/2021 05:51:42 [ประกาศ] 13#13: ปิดตัวลงอย่างสง่างาม
25/10/2021 05:51:42 [ประกาศ] 12#12: ออก
25/10/2021 05:51:42 [ประกาศ] 13#13: กำลังออก
25/10/2021 05:51:42 [ประกาศ] 13#13: ออก
25/10/2021 05:51:42 [ประกาศ] 1#1: สัญญาณ 17 (SIGCHLD) ได้รับจาก 12
25/10/2021 05:51:42 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 12 ออกด้วยรหัส 0
25/10/2021 05:51:42 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 13 ออกด้วยรหัส 0
25/10/2021 05:51:42 [ประกาศ] 1#1: ออก
25/10/2021 05:51:44 [ประกาศ] 1#1: ใช้วิธีเหตุการณ์ "epoll"
25/10/2021 05:51:44 [ประกาศ] 1#1: nginx/1.21.3
25/10/2021 05:51:44 [ประกาศ] 1#1: สร้างโดย gcc 8.3.0 (Debian 8.3.0-6)
25/10/2021 05:51:44 [ประกาศ] 1#1: OS: Linux 5.4.0-86-generic
25/10/2021 05:51:44 [ประกาศ] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
25/10/2021 05:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน
25/10/2021 05:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 9
25/10/2021 05:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 10
กับ บางครั้ง ฉันหมายถึงบางครั้ง ฉันไม่สามารถสร้างรูปแบบใด ๆ ได้จนถึงตอนนี้ ก่อนอื่นฉันคิดว่า Nginx ปิดตัวลงทุก ๆ 6 ชั่วโมงเพราะ สั่งการ
. แต่ดูเหมือนว่าจะไม่เป็นเช่นนั้น ฉันลดเวลาพักเครื่องลงเหลือ 2 นาทีและ Nginx ก็ทำงานได้ดีเป็นเวลาหลายชั่วโมง จากนั้นฉันตั้งเวลาสลีปอีกครั้งเป็น 6 ชั่วโมงและอีก 6 ชั่วโมงต่อมา Nginx ก็หยุดทำงาน (ดูบันทึกด้านบน) ฉันรีสตาร์ทคอนเทนเนอร์ Docker และตั้งแต่นั้นมา Nginx ก็กำลังทำงาน (ผ่านไปเกิน 24 ชั่วโมงแล้ว) ดังที่คุณเห็นในบันทึกต่อไปนี้ ในกรณีส่วนใหญ่การโหลดซ้ำของ Nginx จะทำงานได้ดีอย่างสมบูรณ์:
...
25/10/2021 11:51:44 [ประกาศ] 19#19: เริ่มกระบวนการส่งสัญญาณ
25/2021/10 11:51:44 [ประกาศ] 1#1: สัญญาณ 1 (SIGHUP) ได้รับจาก 19, กำหนดค่าใหม่
25/10/2021 11:51:44 [ประกาศ] 1#1: การกำหนดค่าใหม่
25/10/2021 11:51:44 [ประกาศ] 1#1: ใช้วิธีเหตุการณ์ "epoll"
25/10/2021 11:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน
25/10/2021 11:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 21
25/10/2021 11:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 22
25/10/2021 11:51:44 [ประกาศ] 10#10: ปิดตัวลงอย่างสง่างาม
25/10/2021 11:51:44 [ประกาศ] 9#9: ปิดตัวลงอย่างสวยงาม
25/10/2021 11:51:44 [ประกาศ] 10#10: กำลังออก
25/10/2021 11:51:44 [ประกาศ] 9#9: กำลังออก
25/2021/10 11:51:44 [ประกาศ] 9#9: ออก
25/10/2021 11:51:44 [ประกาศ] 10#10: ออก
25/10/2021 11:51:44 [ประกาศ] 1#1: สัญญาณ 17 (SIGCHLD) ได้รับจาก 10
25/10/2021 11:51:44 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 9 ออกด้วยรหัส 0
25/10/2021 11:51:44 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 10 ออกด้วยรหัส 0
25/10/2021 11:51:44 [ประกาศ] 1#1: รับสัญญาณ 29 (SIGIO)
...
...
25/10/2021 17:51:44 [ประกาศ] 23#23: เริ่มกระบวนการสัญญาณ
25/2021/10 17:51:44 [ประกาศ] 1#1: สัญญาณ 1 (SIGHUP) ได้รับจาก 23 กำหนดค่าใหม่
25/10/2021 17:51:44 [ประกาศ] 1#1: การกำหนดค่าใหม่
25/10/2021 17:51:44 [ประกาศ] 1#1: ใช้วิธีเหตุการณ์ "epoll"
25/10/2021 17:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน
25/10/2021 17:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 25
25/10/2021 17:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 26
25/10/2021 17:51:44 [ประกาศ] 22#22: ปิดตัวลงอย่างสวยงาม
25/10/2021 17:51:44 [ประกาศ] 21#21: ปิดตัวลงอย่างสวยงาม
25/10/2021 17:51:44 [ประกาศ] 21#21: กำลังออก
25/10/2021 17:51:44 [ประกาศ] 22#22: กำลังออก
25/10/2021 17:51:44 [ประกาศ] 21#21: ทางออก
25/10/2021 17:51:44 [ประกาศ] 22#22: ทางออก
25/10/2021 17:51:44 [ประกาศ] 1#1: สัญญาณ 17 (SIGCHLD) ได้รับจาก 21
25/10/2021 17:51:44 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 21 ออกด้วยรหัส 0
25/2021/10 17:51:44 [ประกาศ] 1#1: รับสัญญาณ 29 (SIGIO)
25/10/2021 17:51:44 [ประกาศ] 1#1: สัญญาณ 17 (SIGCHLD) ได้รับจาก 22
25/10/2021 17:51:44 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 22 ออกด้วยรหัส 0
25/2021/10 17:51:44 [ประกาศ] 1#1: รับสัญญาณ 29 (SIGIO)
...
คำถามของฉัน:
- มีอะไรผิดปกติกับ
สั่งการ
ฉันใช้? คอนเทนเนอร์ควรหยุดทันทีที่ Nginx หยุดหรือไม่ (อาจมีบางอย่างผิดปกติกับกระบวนการหลัก?)
- เหตุใด Nginx จึงหยุดอย่างไม่สม่ำเสมอ ทำไมไม่ทุก 6 ชั่วโมง? คุณเห็นความแตกต่างระหว่างบันทึกแรกกับบันทึกที่สอง/สามหรือไม่?
- คุณมีคำแนะนำอื่น ๆ อีกไหม ฉันจะทำให้ Nginx โหลดตัวเองใหม่ได้อย่างไร (ตามที่กล่าวไว้ข้างต้น ฉันไม่ต้องการอะไรบนโฮสต์ + ฉันไม่ต้องการรวมคอนเทนเนอร์ nginx และ certbot หากไม่จำเป็นจริงๆ...)
ขอขอบคุณสำหรับความช่วยเหลือของคุณ!