máy chủ:
Tôi sử dụng Nginx làm proxy xâm nhập cho máy chủ của mình. Nginx chạy trong một Docker container.
docker-compose.yml:
nginx_ingress:
hình ảnh: nginx: mới nhất
cổng:
- "80:80"
- "443:443"
mạng:
tầng trước: {}
tầng sau:
ipv4_address: 172.28.1.1
khởi động lại: luôn luôn
khối lượng:
- /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
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
Vì tôi quản lý nhiều chứng chỉ với một vùng chứa khác, nên tôi muốn Nginx tải lại cấu hình một cách duyên dáng sau mỗi 6 giờ.
Ý tưởng là tôi có thể quản lý độc lập tất cả các chứng chỉ của mình với một vùng chứa khác. Tôi không muốn có bất cứ thứ gì chạy trên máy chủ của mình (không có cronjob) và tôi không muốn kết hợp bộ chứa nginx-proxy của mình với bộ chứa chứng chỉ của mình. Tôi muốn mọi mảnh ghép hoạt động độc lập.
(Tôi có ý tưởng từ hướng dẫn này: https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71)
Vấn đề:
Đôi khi proxy (nginx) ngừng hoạt động. Trong khi bộ chứa Docker vẫn tiếp tục chạy.
Nhật ký hiển thị như sau:
...
25/10/2021 05:51:42 [thông báo] 1#1: nhận được tín hiệu 3 (SIGQUIT), đang tắt
25/10/2021 05:51:42 [thông báo] 12#12: tạm ngừng hoạt động
25/10/2021 05:51:42 [thông báo] 12#12: thoát
25/10/2021 05:51:42 [thông báo] 13#13: tạm ngừng hoạt động
25/10/2021 05:51:42 [thông báo] 12#12: thoát
25/10/2021 05:51:42 [thông báo] 13#13: thoát
25/10/2021 05:51:42 [thông báo] 13#13: thoát
25/10/2021 05:51:42 [thông báo] 1#1: tín hiệu 17 (SIGCHLD) nhận được từ 12
25/10/2021 05:51:42 [thông báo] 1#1: worker process 12 đã thoát với mã 0
25/10/2021 05:51:42 [thông báo] 1#1: worker process 13 đã thoát với mã 0
25/10/2021 05:51:42 [thông báo] 1#1: thoát
25/10/2021 05:51:44 [thông báo] 1#1: sử dụng phương thức sự kiện "epoll"
25/10/2021 05:51:44 [thông báo] 1#1: nginx/1.21.3
25/10/2021 05:51:44 [thông báo] 1#1: được xây dựng bởi gcc 8.3.0 (Debian 8.3.0-6)
25/10/2021 05:51:44 [thông báo] 1#1: Hệ điều hành: Linux 5.4.0-86-generic
25/10/2021 05:51:44 [thông báo] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
25/10/2021 05:51:44 [thông báo] 1#1: bắt đầu quy trình worker
25/10/2021 05:51:44 [thông báo] 1#1: bắt đầu worker process 9
25/10/2021 05:51:44 [thông báo] 1#1: bắt đầu worker process 10
Với thỉnh thoảng Ý tôi là đôi khi. Tôi không thể tạo ra bất kỳ mô hình nào cho đến nay. Đầu tiên tôi nghĩ Nginx sẽ tắt cứ sau 6 giờ vì chỉ huy
. Nhưng có vẻ như đây không phải là trường hợp. Tôi đã giảm thời gian ngủ xuống còn 2 phút và Nginx vẫn chạy tốt trong nhiều giờ. Sau đó, tôi đặt lại thời gian ngủ thành 6 giờ và đúng 6 giờ sau Nginx ngừng hoạt động (xem nhật ký ở trên). Tôi đã khởi động lại bộ chứa Docker và kể từ đó Nginx đang chạy (hơn 24 giờ đã trôi qua). Như bạn có thể thấy trong nhật ký sau, trong hầu hết các trường hợp, quá trình tải lại Nginx hoạt động hoàn toàn tốt:
...
25/10/2021 11:51:44 [thông báo] 19#19: bắt đầu xử lý tín hiệu
25/10/2021 11:51:44 [thông báo] 1#1: tín hiệu 1 (SIGHUP) nhận được từ 19, cấu hình lại
25/10/2021 11:51:44 [thông báo] 1#1: cấu hình lại
25/10/2021 11:51:44 [thông báo] 1#1: sử dụng phương thức sự kiện "epoll"
25/10/2021 11:51:44 [thông báo] 1#1: bắt đầu quy trình worker
25/10/2021 11:51:44 [thông báo] 1#1: bắt đầu worker process 21
25/10/2021 11:51:44 [thông báo] 1#1: bắt đầu worker process 22
25/10/2021 11:51:44 [thông báo] 10#10: tạm ngừng hoạt động
25/10/2021 11:51:44 [thông báo] 9#9: tạm ngừng hoạt động
25/10/2021 11:51:44 [thông báo] 10#10: thoát
25/10/2021 11:51:44 [thông báo] 9#9: thoát
25/10/2021 11:51:44 [thông báo] 9#9: thoát
25/10/2021 11:51:44 [thông báo] 10#10: thoát
25/10/2021 11:51:44 [thông báo] 1#1: tín hiệu 17 (SIGCHLD) nhận được từ 10
25/10/2021 11:51:44 [thông báo] 1#1: worker process 9 đã thoát với mã 0
25/10/2021 11:51:44 [thông báo] 1#1: worker process 10 đã thoát với mã 0
25/10/2021 11:51:44 [thông báo] 1#1: đã nhận được tín hiệu 29 (SIGIO)
...
...
25/10/2021 17:51:44 [thông báo] 23#23: bắt đầu xử lý tín hiệu
25/10/2021 17:51:44 [thông báo] 1#1: tín hiệu 1 (SIGHUP) nhận được từ 23, cấu hình lại
25/10/2021 17:51:44 [thông báo] 1#1: cấu hình lại
25/10/2021 17:51:44 [thông báo] 1#1: sử dụng phương thức sự kiện "epoll"
25/10/2021 17:51:44 [thông báo] 1#1: bắt đầu quy trình worker
25/10/2021 17:51:44 [thông báo] 1#1: bắt đầu worker process 25
25/10/2021 17:51:44 [thông báo] 1#1: bắt đầu worker process 26
25/10/2021 17:51:44 [thông báo] 22#22: tạm ngừng hoạt động
25/10/2021 17:51:44 [thông báo] 21#21: tạm ngừng hoạt động
25/10/2021 17:51:44 [thông báo] 21#21: thoát
25/10/2021 17:51:44 [thông báo] 22#22: thoát
25/10/2021 17:51:44 [thông báo] 21#21: thoát
25/10/2021 17:51:44 [thông báo] 22#22: thoát
25/10/2021 17:51:44 [thông báo] 1#1: tín hiệu 17 (SIGCHLD) nhận được từ 21
25/10/2021 17:51:44 [thông báo] 1#1: worker process 21 đã thoát với mã 0
25/10/2021 17:51:44 [thông báo] 1#1: đã nhận được tín hiệu 29 (SIGIO)
25/10/2021 17:51:44 [thông báo] 1#1: tín hiệu 17 (SIGCHLD) nhận được từ 22
25/10/2021 17:51:44 [thông báo] 1#1: worker process 22 đã thoát với mã 0
25/10/2021 17:51:44 [thông báo] 1#1: đã nhận được tín hiệu 29 (SIGIO)
...
Những câu hỏi của tôi:
- Có gì sai với
chỉ huy
Tôi sử dụng? Vùng chứa có nên dừng ngay khi Nginx dừng không? (có thể đã xảy ra sự cố với quy trình chính?)
- Tại sao Nginx chỉ dừng bất thường? Tại sao không phải 6 giờ một lần? Bạn có thấy sự khác biệt nào giữa nhật ký đầu tiên và nhật ký thứ hai/thứ ba không?
- Bạn có bất kỳ đề xuất nào khác về cách tôi có thể khiến Nginx tự tải lại không? (như đã đề cập ở trên, tôi không muốn bất cứ thứ gì trên máy chủ + Tôi không muốn kết hợp các thùng chứa nginx và certbot nếu không thực sự cần thiết ...)
Cảm ơn sự giúp đỡ của bạn!