%20%E3%81%93%E3%81%A8%E3%81%AF%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
私は PHP-FPM を搭載した Apache 2.4 で Web サイトを運営しています。一部のページは生成に数秒かかります。時々、ボットやクローラーが一度に大量のページをダウンロードしようとすると、すべてのリクエストに対して PHP プロセスが生成され、メモリ不足によりサーバーが非常に遅くなります。
PHP プロセス数や同時接続数 (mod_qos を使用した単一 IP からの同時接続数も) を制限することはできますが、その後のリクエスト (または少なくともその IP からの追加のリクエスト) はすぐに 503 の結果になります。余分なリクエストをバックログに保持し、前のリクエストが終了したときに処理することは可能ですか?
答え1
このマニュアルに従って、Nginx をリバース プロキシとしてインストールし、そこにレート制限を適用します。https://www.nginx.com/blog/rate-limiting-nginx/
そのページに描かれている機能のすべてをコピーするつもりはありません。たくさんあるので、自分で読んだほうがよいでしょう。それは公式ブログ ページなので、なくなる可能性は低いです。