Chạy nginx 1.9 */PHP 7.0 * (nhưng hành vi chính xác như nhau trong 5,6 * cũng có.)Nginx/PHP FPM dừng duyên dáng (SIGQUIT): không quá duyên dáng
Cố gắng một cách duyên dáng ngăn chặn một PHP-FPM /.. nginx combo cho nút tắt máy trong quá trình bảo trì. Để làm điều này, tôi sẽ gửi SIGQUIT tới php-fpm, trong đó nên cung cấp tắt máy duyên dáng.
Để kiểm tra điều này, tôi đã thực hiện một kịch bản ngớ ngẩn
<?php sleep(5); echo 'done';
Tested tại địa phương như sau curl
curl -I x.x.x.x:8080
nào thường sẽ cho kết quả:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 12 Apr 2016 04:48:00 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
mong muốn: trong giữa bất kỳ yêu cầu nào trong chuyến bay, khi yêu cầu tắt máy duyên dáng, yêu cầu hiện tại sẽ kết thúc, nhưng mọi yêu cầu bổ sung sẽ không thành công.
Thật không may, khi tôi cố gắng để kích hoạt hành vi này, bằng cách gửi một SIGQUIT (http://manpages.ubuntu.com/manpages/precise/man8/php5-fpm.8.html) đến quá trình tổng PHP-FPM:
kill -s SIGQUIT $FPMPID
Kết nối ngay giọt, dẫn đến một ngnix 502
HTTP/1.1 502 Bad Gateway
Server: nginx
Date: Tue, 12 Apr 2016 04:48:07 GMT
Content-Type: text/html
Content-Length: 166
Connection: close
Bạn có lời khuyên nào không? Tôi rất thích làm cho phần này của hệ thống liền mạch nhất có thể. Cảm ơn!
Liên kết được đính kèm khá chết (503), tín hiệu quá trình được tóm tắt ở đây: https://forum.nginx.org/read.php?3,3485,template=head%3F%3F. –
Đúng. https://bugs.php.net/bug.php?id=41593 và, cho tôi thậm chí quan trọng-er, ** https: //bugs.php.net/bug.php? id = 60961 **. Tôi không biết làm thế nào chính xác (và nếu) chúng có liên quan, nhưng PHP-FPM tiếc là có ít phiền toái của nó. – Smuuf
Tôi có thể đề xuất một chút cách giải quyết cho bạn. Nó không sửa chữa php-fpm, nhưng giúp trả lời 200 :) Tất cả những gì bạn cần là thiết lập 'upstream' trong cấu hình nginx với 2-3 backends (nó có thể là cùng một nhóm php-fpm vài lần). Vì vậy, nếu một trong các yêu cầu thất bại, nginx sẽ cố gắng yêu cầu phụ trợ một lần nữa. –