From 445513c1a26f7f1639fad2f622ce12f7491dfd88 Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Tue, 27 Sep 2011 08:28:22 -0400
Subject: [PATCH] - Added PHP-FPM pm settings (pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers) to the "Options" tab of a website.
---
interface/web/sites/templates/web_domain_advanced.htm | 16 +++++
server/conf/vhost.conf.master | 2
install/sql/incremental/upd_0025.sql | 4 +
server/conf/nginx_vhost.conf.master | 2
install/sql/ispconfig3.sql | 4 +
interface/web/sites/lib/lang/de_web_domain.lng | 9 +++
interface/web/sites/lib/lang/en_web_domain.lng | 9 +++
interface/web/sites/web_domain_edit.php | 24 +++++--
server/plugins-available/nginx_plugin.inc.php | 4 +
interface/web/sites/form/web_domain.tform.php | 48 ++++++++++++++++
server/conf/php_fpm_pool.conf.master | 8 +-
11 files changed, 116 insertions(+), 14 deletions(-)
diff --git a/install/sql/incremental/upd_0025.sql b/install/sql/incremental/upd_0025.sql
new file mode 100644
index 0000000..c49a971
--- /dev/null
+++ b/install/sql/incremental/upd_0025.sql
@@ -0,0 +1,4 @@
+ALTER TABLE `web_domain` ADD `pm_max_children` INT NOT NULL DEFAULT '50' AFTER `php_fpm_use_socket` ,
+ADD `pm_start_servers` INT NOT NULL DEFAULT '20' AFTER `pm_max_children` ,
+ADD `pm_min_spare_servers` INT NOT NULL DEFAULT '5' AFTER `pm_start_servers` ,
+ADD `pm_max_spare_servers` INT NOT NULL DEFAULT '35' AFTER `pm_min_spare_servers`;
\ No newline at end of file
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 378af4a..8a9fad6 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1513,6 +1513,10 @@
`apache_directives` mediumtext,
`nginx_directives` mediumtext,
`php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'n',
+ `pm_max_children` int(11) NOT NULL DEFAULT '50',
+ `pm_start_servers` int(11) NOT NULL DEFAULT '20',
+ `pm_min_spare_servers` int(11) NOT NULL DEFAULT '5',
+ `pm_max_spare_servers` int(11) NOT NULL DEFAULT '35',
`php_open_basedir` mediumtext,
`custom_php_ini` mediumtext,
`backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none',
diff --git a/interface/web/sites/form/web_domain.tform.php b/interface/web/sites/form/web_domain.tform.php
index 43dce0b..4c6bed4 100644
--- a/interface/web/sites/form/web_domain.tform.php
+++ b/interface/web/sites/form/web_domain.tform.php
@@ -511,6 +511,54 @@
'default' => 'n',
'value' => array(0 => 'n',1 => 'y')
),
+ 'pm_max_children' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'REGEX',
+ 'regex' => '/^([1-9][0-9]{0,10})$/',
+ 'errmsg'=> 'pm_max_children_error_regex'),
+ ),
+ 'default' => '50',
+ 'value' => '',
+ 'width' => '3',
+ 'maxlength' => '3'
+ ),
+ 'pm_start_servers' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'REGEX',
+ 'regex' => '/^([1-9][0-9]{0,10})$/',
+ 'errmsg'=> 'pm_start_servers_error_regex'),
+ ),
+ 'default' => '20',
+ 'value' => '',
+ 'width' => '3',
+ 'maxlength' => '3'
+ ),
+ 'pm_min_spare_servers' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'REGEX',
+ 'regex' => '/^([1-9][0-9]{0,10})$/',
+ 'errmsg'=> 'pm_min_spare_servers_error_regex'),
+ ),
+ 'default' => '5',
+ 'value' => '',
+ 'width' => '3',
+ 'maxlength' => '3'
+ ),
+ 'pm_max_spare_servers' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'REGEX',
+ 'regex' => '/^([1-9][0-9]{0,10})$/',
+ 'errmsg'=> 'pm_max_spare_servers_error_regex'),
+ ),
+ 'default' => '35',
+ 'value' => '',
+ 'width' => '3',
+ 'maxlength' => '3'
+ ),
'php_open_basedir' => array (
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
diff --git a/interface/web/sites/lib/lang/de_web_domain.lng b/interface/web/sites/lib/lang/de_web_domain.lng
index b69695a..7aec4b1 100644
--- a/interface/web/sites/lib/lang/de_web_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_domain.lng
@@ -80,4 +80,13 @@
$wb['ipv6_address_txt'] = 'IPv6-Address';
$wb['error_no_sni_txt'] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
$wb["python_txt"] = 'Python';
+$wb["pm_max_children_txt"] = 'PHP-FPM pm.max_children';
+$wb["pm_start_servers_txt"] = 'PHP-FPM pm.start_servers';
+$wb["pm_min_spare_servers_txt"] = 'PHP-FPM pm.min_spare_servers';
+$wb["pm_max_spare_servers_txt"] = 'PHP-FPM pm.max_spare_servers';
+$wb["error_php_fpm_pm_settings_txt"] = 'Die Werte der PHP-FPM pm Einstellungen müssen wie folgt sein: pm.max_children >= pm.max_spare_servers >= pm.start_servers >= pm.min_spare_servers > 0';
+$wb["pm_max_children_error_regex"] = 'PHP-FPM pm.max_children muß eine positive ganze Zahl sein.';
+$wb["pm_start_servers_error_regex"] = 'PHP-FPM pm.start_servers muß eine positive ganze Zahl sein.';
+$wb["pm_min_spare_servers_error_regex"] = 'PHP-FPM pm.min_spare_servers muß eine positive ganze Zahl sein.';
+$wb["pm_max_spare_servers_error_regex"] = 'PHP-FPM pm.max_spare_servers muß eine positive ganze Zahl sein.';
?>
diff --git a/interface/web/sites/lib/lang/en_web_domain.lng b/interface/web/sites/lib/lang/en_web_domain.lng
index af1e098..b7fcc67 100644
--- a/interface/web/sites/lib/lang/en_web_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_domain.lng
@@ -80,4 +80,13 @@
$wb["php_fpm_use_socket_txt"] = 'Use Socket For PHP-FPM';
$wb["error_no_sni_txt"] = 'SNI for SSL is not activated on this server. You can enable only one SSL certificate on each IP address.';
$wb["python_txt"] = 'Python';
+$wb["pm_max_children_txt"] = 'PHP-FPM pm.max_children';
+$wb["pm_start_servers_txt"] = 'PHP-FPM pm.start_servers';
+$wb["pm_min_spare_servers_txt"] = 'PHP-FPM pm.min_spare_servers';
+$wb["pm_max_spare_servers_txt"] = 'PHP-FPM pm.max_spare_servers';
+$wb["error_php_fpm_pm_settings_txt"] = 'Values of PHP-FPM pm settings must be as follows: pm.max_children >= pm.max_spare_servers >= pm.start_servers >= pm.min_spare_servers > 0';
+$wb["pm_max_children_error_regex"] = 'PHP-FPM pm.max_children must be a positive integer value.';
+$wb["pm_start_servers_error_regex"] = 'PHP-FPM pm.start_servers must be a positive integer value.';
+$wb["pm_min_spare_servers_error_regex"] = 'PHP-FPM pm.min_spare_servers must be a positive integer value.';
+$wb["pm_max_spare_servers_error_regex"] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
?>
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_domain_advanced.htm b/interface/web/sites/templates/web_domain_advanced.htm
index 4b51cc1..2000ff6 100644
--- a/interface/web/sites/templates/web_domain_advanced.htm
+++ b/interface/web/sites/templates/web_domain_advanced.htm
@@ -26,6 +26,22 @@
{tmpl_var name='php_fpm_use_socket'}
</div>
</div>
+ <div class="ctrlHolder nginx">
+ <label for="pm_max_children">{tmpl_var name='pm_max_children_txt'}</label>
+ <input name="pm_max_children" id="pm_max_children" value="{tmpl_var name='pm_max_children'}" size="3" maxlength="3" type="text" class="textInput formLengthLimit" />
+ </div>
+ <div class="ctrlHolder nginx">
+ <label for="pm_start_servers">{tmpl_var name='pm_start_servers_txt'}</label>
+ <input name="pm_start_servers" id="pm_start_servers" value="{tmpl_var name='pm_start_servers'}" size="3" maxlength="3" type="text" class="textInput formLengthLimit" />
+ </div>
+ <div class="ctrlHolder nginx">
+ <label for="pm_min_spare_servers">{tmpl_var name='pm_min_spare_servers_txt'}</label>
+ <input name="pm_min_spare_servers" id="pm_min_spare_servers" value="{tmpl_var name='pm_min_spare_servers'}" size="3" maxlength="3" type="text" class="textInput formLengthLimit" />
+ </div>
+ <div class="ctrlHolder nginx">
+ <label for="pm_max_spare_servers">{tmpl_var name='pm_max_spare_servers_txt'}</label>
+ <input name="pm_max_spare_servers" id="pm_max_spare_servers" value="{tmpl_var name='pm_max_spare_servers'}" size="3" maxlength="3" type="text" class="textInput formLengthLimit" />
+ </div>
<div class="ctrlHolder">
<label for="php_open_basedir">{tmpl_var name='php_open_basedir_txt'}</label>
<input name="php_open_basedir" id="php_open_basedir" value="{tmpl_var name='php_open_basedir'}" size="30" type="text" class="textInput" style="width:400px;" />
diff --git a/interface/web/sites/web_domain_edit.php b/interface/web/sites/web_domain_edit.php
index 13af0a1..dff5148 100644
--- a/interface/web/sites/web_domain_edit.php
+++ b/interface/web/sites/web_domain_edit.php
@@ -418,15 +418,23 @@
if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
//* get the server config for this server
- $app->uses("getconf");
- $web_config = $app->getconf->get_server_config(intval($this->dataRecord["server_id"]),'web');
- //* Check for duplicate ssl certs per IP if SNI is disabled
- if(isset($this->dataRecord['ssl']) && $this->dataRecord['ssl'] == 'y' && $web_config['enable_sni'] != 'y') {
- $sql = "SELECT count(domain_id) as number FROM web_domain WHERE `ssl` = 'y' AND ip_address = '".$app->db->quote($this->dataRecord['ip_address'])."' and domain_id != ".$this->id;
- $tmp = $app->db->queryOneRecord($sql);
- if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("error_no_sni_txt");
- }
+ $app->uses("getconf");
+ $web_config = $app->getconf->get_server_config(intval($this->dataRecord["server_id"]),'web');
+ //* Check for duplicate ssl certs per IP if SNI is disabled
+ if(isset($this->dataRecord['ssl']) && $this->dataRecord['ssl'] == 'y' && $web_config['enable_sni'] != 'y') {
+ $sql = "SELECT count(domain_id) as number FROM web_domain WHERE `ssl` = 'y' AND ip_address = '".$app->db->quote($this->dataRecord['ip_address'])."' and domain_id != ".$this->id;
+ $tmp = $app->db->queryOneRecord($sql);
+ if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("error_no_sni_txt");
+ }
+ // Check if pm.max_children >= pm.max_spare_servers >= pm.start_servers >= pm.min_spare_servers > 0
+ if(isset($this->dataRecord['pm_max_children'])) {
+ if(intval($this->dataRecord['pm_max_children']) >= intval($this->dataRecord['pm_max_spare_servers']) && intval($this->dataRecord['pm_max_spare_servers']) >= intval($this->dataRecord['pm_start_servers']) && intval($this->dataRecord['pm_start_servers']) >= intval($this->dataRecord['pm_min_spare_servers']) && intval($this->dataRecord['pm_min_spare_servers']) > 0){
+
+ } else {
+ $app->tform->errorMessage .= $app->tform->lng("error_php_fpm_pm_settings_txt").'<br>';
+ }
+ }
parent::onSubmit();
}
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index fd05731..4027b56 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -44,7 +44,7 @@
error_page 404 /error/404.html;
error_page 405 /error/405.html;
error_page 500 /error/500.html;
- error_page 502 /error/502.html;
+ error_page 502 /error/502.html;
error_page 503 /error/503.html;
</tmpl_if>
diff --git a/server/conf/php_fpm_pool.conf.master b/server/conf/php_fpm_pool.conf.master
index 0e74173..cd1ba12 100644
--- a/server/conf/php_fpm_pool.conf.master
+++ b/server/conf/php_fpm_pool.conf.master
@@ -15,10 +15,10 @@
group = <tmpl_var name='fpm_group'>
pm = dynamic
-pm.max_children = 50
-pm.start_servers = 20
-pm.min_spare_servers = 5
-pm.max_spare_servers = 35
+pm.max_children = <tmpl_var name='pm_max_children'>
+pm.start_servers = <tmpl_var name='pm_start_servers'>
+pm.min_spare_servers = <tmpl_var name='pm_min_spare_servers'>
+pm.max_spare_servers = <tmpl_var name='pm_max_spare_servers'>
chdir = /
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index 8ea14b7..410d44d 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -33,7 +33,7 @@
ErrorDocument 404 /error/404.html
ErrorDocument 405 /error/405.html
ErrorDocument 500 /error/500.html
- ErrorDocument 502 /error/502.html
+ ErrorDocument 502 /error/502.html
ErrorDocument 503 /error/503.html
</tmpl_if>
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 4c9c2ab..5e927cd 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1132,6 +1132,10 @@
$tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] + 1);
$tpl->setVar('fpm_user', $data['new']['system_user']);
$tpl->setVar('fpm_group', $data['new']['system_group']);
+ $tpl->setVar('pm_max_children', $data['new']['pm_max_children']);
+ $tpl->setVar('pm_start_servers', $data['new']['pm_start_servers']);
+ $tpl->setVar('pm_min_spare_servers', $data['new']['pm_min_spare_servers']);
+ $tpl->setVar('pm_max_spare_servers', $data['new']['pm_max_spare_servers']);
$tpl->setVar('document_root', $data['new']['document_root']);
$tpl->setVar('security_level',$web_config['security_level']);
$php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']);
--
Gitblit v1.9.1