在网络服务器上,通常可以很好地与nginx
and php-fpm
(当前版本 7.0.22,但这主要与版本无关),有时会发生 502 Bad Gateway。这通常意味着:其中一个php-fpm
进程已经崩溃,并且nginx
没有收到来自所选进程的答复。
我目前的解决方法是不仅要监视php-fpm
进程,还要监视 PHP 页面的输出。如果这在 4 分钟内不起作用(两次失败的重试,监视间隔为 2 分钟),monit
则将终止所有php-fpm
进程并重新启动php-fpm
服务。有效,但仍会导致 5 分钟的停机时间(至少对于连接到损坏进程的某些用户而言)或更长时间,因为monit
在它观察到 502 Bad Gateway 之前,不妨从一个健全的进程中看到几次答案。
(1) 理想的解决方案是修复任何破坏php-fpm
进程的错误。然而,这个错误很少发生,所以我无法找到一些具体的原因。可能是 PHP 脚本中的内存泄漏……我不知道。
(2) 我认为,第二好的选择将涉及来自 的一些合作nginx
。如果 webserver 进程可以对 PHP 故障做出反应,它可以 (a) 杀死特别损坏的进程并 (b) 尝试另一个进程,而不是抛出 502 Bad Gatway。
到目前为止,我还没有找到nginx
对失败做出反应的选项。谁知道如何实现这一目标?还是有更简单的解决方案,我错过了?
connect() to unix:/run/php/php7.0-fpm.sock failed (11: Resource temporarily unavailable)