PHP进程终止时发送电子邮件的最佳方式

Bri*_*ian 10 php email nginx

我写了一个快速的PHP页面来处理502个请求.当遇到502并触发电子邮件时,Nginx将重定向到此页面.

问题是,遇到502的大部分时间是因为PHP已经死亡,所以写入数据库并使用PHP发送电子邮件已不再可能.对PHP-FPM设置的调整已经做了很多工作来帮助(重启PHP等),但我仍然喜欢回退.

有许多方法可以在PHP之外发送电子邮件,但我很好奇其他人在做什么并取得了成功?我想保持配置简单(即没有另一个复杂的依赖关系担心服务器)和可靠性原因.

谷歌搜索和搜索SO没有太多,可能是因为"死亡"和"失败"为我的场景带来了很多误报.

Bri*_*ian 1

这就是我最终所做的。我还没有将其推广到我们的产品服务器,但到目前为止所有测试看起来都不错。

Nginx 本身不支持 CGI,因此您需要另一种方法来实现。thttpd非常符合要求。nginx wiki有一篇很好的文章展示了如何使用它。

我使用以下内容配置了 thttpd:

dir=/var/www/htdocs
user=thttpd
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
port=8000
cgipat=**.cgi
Run Code Online (Sandbox Code Playgroud)

并将其添加到我的 nginx 配置中:

error_page 502 @thttpd;

location @thttpd {
    include proxy.include;
    proxy_pass http://127.0.0.1:8000;
}
Run Code Online (Sandbox Code Playgroud)

最后,我创建了一个基本的 CGI 脚本,该脚本在命令行上调用 PHP 并传入我已经编写的 PHP 脚本。这对我来说是一个理想的解决方案,因为脚本已经设置为记录到我们的警报表并发送电子邮件。这也是实时的,因为一旦 nginx 返回 502 代码,脚本就会立即执行(根据脚本的逻辑,后续的 502 不会用电子邮件来攻击我)。

我能够运行一些模拟测试来强制 nginx 返回 502(请参阅此处的更多内容)。

我将继续对此进行调整,但我对部署它的相对容易性以及我可以重用现有代码感到非常满意。