From 7fbbc2ea0ba1d93364768f2233a3f1228e33313b Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Wed, 24 Mar 2021 13:46:24 +0100 Subject: [PATCH] add vhost replacer {FPMSOCKET} for custom vhost configs; fixes #931 Signed-off-by: Michael Kaufmann --- lib/Froxlor/Cron/Http/ApacheFcgi.php | 8 +++++--- lib/Froxlor/Cron/Http/HttpConfigBase.php | 6 +++++- lib/Froxlor/Cron/Http/LighttpdFcgi.php | 5 +++-- lib/Froxlor/Cron/Http/NginxFcgi.php | 5 +++-- lng/english.lng.php | 2 +- lng/german.lng.php | 2 +- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/Froxlor/Cron/Http/ApacheFcgi.php b/lib/Froxlor/Cron/Http/ApacheFcgi.php index 9e5fbe9c..1582144a 100644 --- a/lib/Froxlor/Cron/Http/ApacheFcgi.php +++ b/lib/Froxlor/Cron/Http/ApacheFcgi.php @@ -24,7 +24,7 @@ use Froxlor\Cron\Http\Php\PhpInterface; class ApacheFcgi extends Apache { - protected function composePhpOptions($domain, $ssl_vhost = false) + protected function composePhpOptions(&$domain, $ssl_vhost = false) { $php_options_text = ''; @@ -43,6 +43,8 @@ class ApacheFcgi extends Apache $php_options_text .= ' SuexecUserGroup "' . $domain['loginname'] . '" "' . $domain['loginname'] . '"' . "\n"; } + $domain['fpm_socket'] = $php->getInterface()->getSocketFile(); + // mod_proxy stuff for apache-2.4 if (Settings::Get('system.apache24') == '1' && Settings::Get('phpfpm.use_mod_proxy') == '1') { $filesmatch = $phpconfig['fpm_settings']['limit_extensions']; @@ -54,7 +56,7 @@ class ApacheFcgi extends Apache // start block, cut off last pipe and close block $filesmatch = '(' . str_replace(".", "\.", substr($filesmatch, 0, - 1)) . ')'; $php_options_text .= ' ' . "\n"; - $php_options_text .= ' SetHandler proxy:unix:' . $php->getInterface()->getSocketFile() . '|fcgi://localhost' . "\n"; + $php_options_text .= ' SetHandler proxy:unix:' . $domain['fpm_socket'] . '|fcgi://localhost' . "\n"; $php_options_text .= ' ' . "\n"; $mypath_dir = new \Froxlor\Http\Directory($domain['documentroot']); @@ -80,7 +82,7 @@ class ApacheFcgi extends Apache if ($phpconfig['pass_authorizationheader'] == '1') { $addheader = " -pass-header Authorization"; } - $php_options_text .= ' FastCgiExternalServer ' . $php->getInterface()->getAliasConfigDir() . $srvName . ' -socket ' . $php->getInterface()->getSocketFile() . ' -idle-timeout ' . $phpconfig['fpm_settings']['idle_timeout'] . $addheader . "\n"; + $php_options_text .= ' FastCgiExternalServer ' . $php->getInterface()->getAliasConfigDir() . $srvName . ' -socket ' . $domain['fpm_socket'] . ' -idle-timeout ' . $phpconfig['fpm_settings']['idle_timeout'] . $addheader . "\n"; $php_options_text .= ' ' . "\n"; $filesmatch = $phpconfig['fpm_settings']['limit_extensions']; $extensions = explode(" ", $filesmatch); diff --git a/lib/Froxlor/Cron/Http/HttpConfigBase.php b/lib/Froxlor/Cron/Http/HttpConfigBase.php index eecbfeff..4a82f2b7 100644 --- a/lib/Froxlor/Cron/Http/HttpConfigBase.php +++ b/lib/Froxlor/Cron/Http/HttpConfigBase.php @@ -98,8 +98,12 @@ class HttpConfigBase 'IP' => $ip, 'PORT' => $port, 'SCHEME' => ($is_ssl_vhost) ? 'https' : 'http', - 'DOCROOT' => $domain['documentroot'] + 'DOCROOT' => $domain['documentroot'], + 'FPMSOCKET' => '' ); + if ((int) Settings::Get('phpfpm.enabled') == 1 && isset($domain['fpm_socket']) && !empty($domain['fpm_socket'])) { + $templateVars['FPMSOCKET'] = $domain['fpm_socket']; + } return \Froxlor\PhpHelper::replaceVariables($template, $templateVars); } diff --git a/lib/Froxlor/Cron/Http/LighttpdFcgi.php b/lib/Froxlor/Cron/Http/LighttpdFcgi.php index 03dc0689..566ac91f 100644 --- a/lib/Froxlor/Cron/Http/LighttpdFcgi.php +++ b/lib/Froxlor/Cron/Http/LighttpdFcgi.php @@ -22,7 +22,7 @@ use Froxlor\Cron\Http\Php\PhpInterface; class LighttpdFcgi extends Lighttpd { - protected function composePhpOptions($domain) + protected function composePhpOptions(&$domain) { $php_options_text = ''; @@ -32,10 +32,11 @@ class LighttpdFcgi extends Lighttpd // vhost data for php-fpm if ((int) Settings::Get('phpfpm.enabled') == 1) { + $domain['fpm_socket'] = $php->getInterface()->getSocketFile(); $php_options_text = ' fastcgi.server = ( ' . "\n"; $php_options_text .= "\t" . '".php" => (' . "\n"; $php_options_text .= "\t\t" . '"localhost" => (' . "\n"; - $php_options_text .= "\t\t" . '"socket" => "' . $php->getInterface()->getSocketFile() . '",' . "\n"; + $php_options_text .= "\t\t" . '"socket" => "' . $domain['fpm_socket'] . '",' . "\n"; $php_options_text .= "\t\t" . '"check-local" => "enable",' . "\n"; $php_options_text .= "\t\t" . '"disable-time" => 1' . "\n"; $php_options_text .= "\t" . ')' . "\n"; diff --git a/lib/Froxlor/Cron/Http/NginxFcgi.php b/lib/Froxlor/Cron/Http/NginxFcgi.php index dc004ad3..ca8031c4 100644 --- a/lib/Froxlor/Cron/Http/NginxFcgi.php +++ b/lib/Froxlor/Cron/Http/NginxFcgi.php @@ -22,7 +22,7 @@ use Froxlor\Cron\Http\Php\PhpInterface; class NginxFcgi extends Nginx { - protected function composePhpOptions($domain, $ssl_vhost = false) + protected function composePhpOptions(&$domain, $ssl_vhost = false) { $php_options_text = ''; @@ -43,7 +43,8 @@ class NginxFcgi extends Nginx if ($domain['ssl'] == '1' && $ssl_vhost) { $php_options_text .= "\t\t" . 'fastcgi_param HTTPS on;' . "\n"; } - $php_options_text .= "\t\t" . 'fastcgi_pass unix:' . $php->getInterface()->getSocketFile() . ";\n"; + $domain['fpm_socket'] = $php->getInterface()->getSocketFile(); + $php_options_text .= "\t\t" . 'fastcgi_pass unix:' . $domain['fpm_socket'] . ";\n"; $php_options_text .= "\t\t" . 'fastcgi_index index.php;' . "\n"; $php_options_text .= "\t}\n\n"; diff --git a/lng/english.lng.php b/lng/english.lng.php index dc3aa324..e00a0c6e 100644 --- a/lng/english.lng.php +++ b/lng/english.lng.php @@ -683,7 +683,7 @@ $lng['message']['noreceipients'] = 'No e-mail has been sent because there are no $lng['admin']['sslsettings'] = 'SSL settings'; $lng['cronjobs']['notyetrun'] = 'Not yet run'; $lng['serversettings']['default_vhostconf']['title'] = 'Default vHost-settings'; -$lng['admin']['specialsettings_replacements'] = "You can use the following variables:
{DOMAIN}, {DOCROOT}, {CUSTOMER}, {IP}, {PORT}, {SCHEME}
"; +$lng['admin']['specialsettings_replacements'] = "You can use the following variables:
{DOMAIN}, {DOCROOT}, {CUSTOMER}, {IP}, {PORT}, {SCHEME}, {FPMSOCKET} (if applicable)
"; $lng['serversettings']['default_vhostconf']['description'] = 'The content of this field will be included into this ip/port vHost container directly. ' . $lng['admin']['specialsettings_replacements'] . ' Attention: The code won\'t be checked for any errors. If it contains errors, webserver might not start again!'; $lng['serversettings']['apache_globaldiropt']['title'] = 'Directory options for customer-prefix'; $lng['serversettings']['apache_globaldiropt']['description'] = 'The content of this field will be included into the 05_froxlor_dirfix_nofcgid.conf apache config. If empty, the default value is used:

apache >=2.4
Require all granted
AllowOverride All


apache <=2.2
Order allow,deny
allow from all
'; diff --git a/lng/german.lng.php b/lng/german.lng.php index bf01dbd0..b896ea02 100644 --- a/lng/german.lng.php +++ b/lng/german.lng.php @@ -676,7 +676,7 @@ $lng['message']['noreceipients'] = 'Es wurde keine E-Mail versendet, da sich kei $lng['admin']['sslsettings'] = 'SSL-Einstellungen'; $lng['cronjobs']['notyetrun'] = 'Bisher nicht gestartet'; $lng['serversettings']['default_vhostconf']['title'] = 'Standard vHost-Einstellungen'; -$lng['admin']['specialsettings_replacements'] = "Die folgenden Variablen können verwendet werden:
{DOMAIN}, {DOCROOT}, {CUSTOMER}, {IP}, {PORT}, {SCHEME}
"; +$lng['admin']['specialsettings_replacements'] = "Die folgenden Variablen können verwendet werden:
{DOMAIN}, {DOCROOT}, {CUSTOMER}, {IP}, {PORT}, {SCHEME}, {FPMSOCKET} (wenn zutreffend)
"; $lng['serversettings']['default_vhostconf']['description'] = 'Der Inhalt dieses Feldes wird direkt in den IP/Port-vHost-Container übernommen. ' . $lng['admin']['specialsettings_replacements'] . '
ACHTUNG: Der Code wird nicht auf Fehler geprüft. Etwaige Fehler werden also auch übernommen. Der Webserver könnte nicht mehr starten!'; $lng['serversettings']['default_vhostconf_domain']['description'] = 'Der Inhalt dieses Feldes wird direkt in jeden Domain-vHost-Container übernommen. ' . $lng['admin']['specialsettings_replacements'] . 'ACHTUNG: Der Code wird nicht auf Fehler geprüft. Etwaige Fehler werden also auch übernommen. Der Webserver könnte nicht mehr starten!'; $lng['serversettings']['apache_globaldiropt']['title'] = 'Kunden-Prefix Ordner-Optionen';