From 99c86dcf3c5e0deb472365c128939fa0be0bca01 Mon Sep 17 00:00:00 2001 From: djmaze Date: Sat, 8 Aug 2020 22:33:12 +0200 Subject: [PATCH] Prevent server overload based on 1 minute system load average over 95% https://www.php.net/sys_getloadavg --- rainloop/v/0.0.0/include.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/rainloop/v/0.0.0/include.php b/rainloop/v/0.0.0/include.php index ecf96ae7e..ed8aa74a8 100644 --- a/rainloop/v/0.0.0/include.php +++ b/rainloop/v/0.0.0/include.php @@ -4,6 +4,16 @@ { if (!defined('APP_REQUEST_RND')) { + if (function_exists('sys_getloadavg')) { + $load = sys_getloadavg(); + if ($load[0] > 95) { + header('HTTP/1.1 503 Service Unavailable'); + header('Retry-After: 120'); + exit('Mailserver too busy. Please try again later.'); + } + unset($load); + } + ini_set('register_globals', 0); ini_set('zend.ze1_compatibility_mode', 0); @@ -15,10 +25,7 @@ // "img-src https:" is allowed due to remote images in e-mails define('APP_DEFAULT_CSP', "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'"); - if (function_exists('date_default_timezone_set')) - { - date_default_timezone_set('UTC'); - } + date_default_timezone_set('UTC'); $sSite = strtolower(trim(empty($_SERVER['HTTP_HOST']) ? (empty($_SERVER['SERVER_NAME']) ? '' : $_SERVER['SERVER_NAME']) : $_SERVER['HTTP_HOST'])); $sSite = 'www.' === substr($sSite, 0, 4) ? substr($sSite, 4) : $sSite;