这就是我最终所做的。我还没有将它推广到我们的产品服务器上,但是到目前为止所有的测试看起来都不错。
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
并将其添加到我的 nginx 配置中:
error_page 502 @thttpd;
location @thttpd {
include proxy.include;
proxy_pass http://127.0.0.1:8000;
}
最后,我创建了一个基本的 CGI 脚本,它在命令行上调用 PHP 并传入我已经编写的 PHP 脚本。这对我来说是一个理想的解决方案,因为脚本已经设置为登录到我们的警报表并发送电子邮件。这也是实时的,因为脚本将在 nginx 返回 502 代码后立即执行(根据脚本的逻辑,随后的 502 不会用电子邮件锤我)。
我能够运行一些模拟测试来强制 nginx 返回 502(请参阅此处的更多信息)。
我将继续对此进行调整,但我对部署它的相对容易性以及可以重用现有代码感到非常满意。