我写了一个快速的PHP页面来处理502个请求.当遇到502并触发电子邮件时,Nginx将重定向到此页面.
问题是,遇到502的大部分时间是因为PHP已经死亡,所以写入数据库并使用PHP发送电子邮件已不再可能.对PHP-FPM设置的调整已经做了很多工作来帮助(重启PHP等),但我仍然喜欢回退.
有许多方法可以在PHP之外发送电子邮件,但我很好奇其他人在做什么并取得了成功?我想保持配置简单(即没有另一个复杂的依赖关系担心服务器)和可靠性原因.
谷歌搜索和搜索SO没有太多,可能是因为"死亡"和"失败"为我的场景带来了很多误报.
这就是我最终所做的。我还没有将其推广到我们的产品服务器,但到目前为止所有测试看起来都不错。
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(请参阅此处的更多内容)。
我将继续对此进行调整,但我对部署它的相对容易性以及我可以重用现有代码感到非常满意。
归档时间: |
|
查看次数: |
611 次 |
最近记录: |