10

502 リクエストを処理する簡単な PHP ページを作成しました。Nginx は、502 に遭遇し、電子メールが送信されると、このページにリダイレクトします。

問題は、ほとんどの場合、502 が発生するのは PHP が停止したためです。そのため、DB への書き込みや PHP を使用した電子メールの送信ができなくなります。PHP-FPM 設定の微調整 (PHP の再起動など) は多くのことを助けましたが、それでもフォールバックが必要です。

PHP 以外で電子メールを送信する方法はたくさんありますが、他の人がどのような方法で成功を収めているのか知りたいです。構成をシンプルに保ちたい (つまり、サーバー上で心配する必要のある別の複雑な依存関係がない) ことと、信頼性の理由からです。

おそらく、「死ぬ」と「失敗する」が私のシナリオに多くの誤検知をもたらすため、SOのグーグルと検索はあまり現れませんでした。

4

3 に答える 3

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

そして、これを私のnginx構成に追加しました:

error_page 502 @thttpd;

location @thttpd {
    include proxy.include;
    proxy_pass http://127.0.0.1:8000;
}

最後に、コマンド ラインで PHP を呼び出す基本的な CGI スクリプトを作成し、作成済みの PHP スクリプトを渡しました。スクリプトはすでにアラート テーブルにログを記録し、電子メールを送信するように設定されているため、これは私にとって理想的なソリューションでした。nginx が 502 コードを返すとすぐにスクリプトが実行されるため、これもリアルタイムです (スクリプトのロジックに従って、その後の 502 はメールで私を攻撃しません)。

nginx に 502 を返すように強制するシミュレーション テストを実行することができました (詳細はこちらを参照)。

これを微調整し続けるつもりですが、デプロイが比較的簡単で、既存のコードを再利用できることにかなり満足しています。

于 2012-12-31T01:56:49.757 に答える
1

cronjob (bash ベース) を使用して error_log ファイルを定期的に (x 時間) 解析resuming normal operationsし、最後の期間 (x 時間) のようなものが見つかったときにメール (mutt/mail) を送信するのはどうでしょうか。シンプルで効果的だと思います...

[Thu Dec 27 14:37:52 2012] [notice] caught SIGTERM, shutting down
[Thu Dec 27 14:37:53 2012] [notice] Apache/2.2.22 (Ubuntu) PHP/5.4.6-2~precise+1 configured -- resuming normal operations

アップデート:

@Brian @takeshin が言うように、必要に応じて cronjobs を毎秒実行することもできますが、一部のシステム管理者はあなたを噛む可能性があります... :|

于 2012-12-27T17:52:41.363 に答える
0

デュアルソリューションがあります。

PHP が停止した場合、シェル スクリプトを使用して電子メール通知を送信します。シェル スクリプトのシェル コマンドで php サービスが実行されているかどうかを確認し、実行されていない場合は、シェル コマンドを起動してメールを送信します。

これはすべて、数行のシェル スクリプトで実行できます。難しすぎない。

もちろん、cronで設定します。

于 2012-12-28T20:30:48.653 に答える