Điểm:2

Nginx Docker Container ngừng hoạt động bất thường

lá cờ cn

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:

  1. 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?)
  2. 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?
  3. 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!

nulldevops avatar
lá cờ cn
Nó dường như làm việc bây giờ. Tôi chỉ cần `--force-recreate` trên `docker-compose up` của mình. Nếu tôi không cưỡng bức tạo lại một cái gì đó, thỉnh thoảng sẽ ném nginx ra ngoài ... Tôi hy vọng điều này sẽ giúp được ai đó.
lonix avatar
lá cờ cn
Tôi cũng gặp vấn đề này, đôi khi nó hoạt động trong nhiều tháng và đôi khi nó dừng lại cứ sau vài ngày. Tôi sẽ thử thủ thuật tái tạo lực lượng của bạn - cảm ơn! Nhưng kể từ khi bạn đăng điều đó, bạn đã tìm ra nguyên nhân chưa? Đây thực sự là một vấn đề nan giải...
nulldevops avatar
lá cờ cn
@lonix Tôi chưa gặp vấn đề gì kể từ đó. Nhưng tôi vẫn không chắc điều gì đã gây ra hành vi này.
lonix avatar
lá cờ cn
Vui mừng khi nghe điều đó. PS bạn không sử dụng docker stack/swarm phải không? Tôi là, nhưng cấu hình của tôi tương tự như của bạn. Tôi đã nâng cấp lên nginx mới nhất có một số sửa lỗi, có thể điều đó sẽ hữu ích!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.