Apache-2.4

Vagrant & Puppetlabs/apache 設置兩個 MPM

  • March 5, 2018

目前我正在嘗試使用 Puppet 模組將我的 Vagrant 機器更新到 PHP7,當然還有更新的模組。但是,自從將 puppetlabs/apache 模組更新到 3.0.0 版本後,它在嘗試安裝libapache2-mod-php7.0.

我已經能夠追查到原因。出於某種原因,puppetlabs/apache 模組::apache::mod::php在呼叫類時設置了兩個 MPM。它將這兩個事件都設置為 prefork MPM。設置 prefork 的原因是因為 Puppet 模組要求您在使用 PHP 時載入 prefork 或 itk 模組。當我定義 prefork 或 itk 時,它也會出於某種原因載入事件 MPM。到目前為止,這就是我呼叫 apache 模組的方式:

class { '::apache':
   default_vhost    => false,
   mpm_module       => 'false',
   server_signature => 'Off',
}

class { '::apache::mod::ssl': }
class { '::apache::mod::prefork': }
class { '::apache::mod::php': }
class { '::apache::mod::rewrite': }
class { '::apache::mod::headers': }

當我將 mpm_module 設置為 itk 或 prefork 以外的任何內容時,它會生成錯誤 itk 或 prefork 是必需的。當我刪除::apache::mod::prefork並將 mpm_module 設置設置為 prefork 時,與目前配置相同。

當我在安裝失敗後 ssh 進入 Vagrant 機器並刪除/etc/apache2/modules-enabled/event.load文件中的 LoadModule 行時,一切都按預期工作。我不知道它為什麼要載入事件 MPM,因為雙 MPM 負載會導致衝突。Apache 不知道要載入哪個 MPM,因此在安裝 libapache2-mod-php7.0 時失敗。

Puppet 也沒有輸出顯示 event.conf/event.load 文件已創建,只有 prefork 文件。

Notice: /Stage[main]/Apache::Mod::Prefork/Apache::Mpm[prefork]/File[/etc/apache2/mods-available/prefork.load]/ensure: defined content as '{md5}01b33d643f63126888cf702689f1f66d'
Notice: /Stage[main]/Apache::Mod::Prefork/Apache::Mpm[prefork]/File[/etc/apache2/mods-enabled/prefork.conf]/ensure: created
Notice: /Stage[main]/Apache::Mod::Prefork/Apache::Mpm[prefork]/File[/etc/apache2/mods-enabled/prefork.load]/ensure: created

我在 Debian Stretch x64 上執行它,帶有 Vagrant、VirtualBox、Puppet 和 Apache/2.4.25 的最新穩定版本。

對於那些感興趣的人,我在 Puppetlabs 的 Jira 中打開了一個錯誤報告,正如預期的那樣,它原來是一個實際的錯誤。當拉取請求通過時,它應該在下一個版本中修復:https ://tickets.puppetlabs.com/browse/MODULES-6677

我想這可以解決這個問題。

引用自:https://serverfault.com/questions/898172