スレッドセーフPHPを使用してUbuntu 14.04でイベントMPM Apache 2.4を有効にする方法


25

デフォルトのApacheインストールで新しいイベントMPMが使用されることを期待して、Ubuntu Server 14.04にアップグレードしましたが、代わりに古いメモリを食べるプリフォークを見つけました。

Arch LinuxでイベントMPMを正常にセットアップしましたが、Ubuntuではそうしていません。私は取得し続けます:

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP

私はすでにインストールしphp-fpm、それを使用するようにapache2を設定しましたが、apache2の設定ファイルはUbuntuでは異なるため、適切な場所でそれを実行しているかどうかはよくわかりません。

apache2 event-mpmを使用できるように、PHPスレッドを安全にする方法に関するアイデアはありますか?(もちろん、PHPを手動で再コンパイルする必要はありません)

回答:


39

無効event MPMにすることができますしsudo a2dismod mpm_event、その後有効preforkにするには、する必要がありますsudo a2enmod mpm_prefork

最後にApacheを再起動します:

sudo service apache2 restart

3
あなたはそこにいる必要があります...ここではなく...答えリストの一番上にあります。
カルマ

2
これは受け入れられた答えであるはずです!これを行った後、apacheを再起動することを忘れないでください:sudo service apache2 restart
Reeno

4
OPが尋ねたように、これはMPMを有効にする方法の質問にどのように答えますか?OPが要求したものとは逆の方法を説明しています。
クレイグ

2
@ Mehraban、OPは「イベントMPMを有効にする方法」という言葉を求め、あなたの答えは「イベントMPMを無効にするだけ」です。これはどのように受け入れられる答えですか?
ニコラスブーリアン

1
@Mehrabanそれは質問された質問ではないので、Googleからここに来るすべてのトラフィックは「Xをする最善の方法はXにしない」と言われています。チョコレートクッキーの作り方を尋ねると、チョコレートクッキーのレシピが期待されます。
ニコラスブーリアン

13

これは私のために働いた。

最初に、このパッケージがインストールされているかどうかを確認してください。

dpkg -l | grep libapache2-mod-php5

持っている場合は削除してください:

apt-get remove libapache2-mod-php5

これは正解です!
DrSvanHay

6

ApacheがPHPと並行して通信するための複数の方法をインストールできます。fastcgi / php-fpmに加えて(まだ)古いmod_phpがインストールされているかもしれません。

実行時にApacheがロードしたモジュールを確認できます

apache2ctl -M

必要に応じて、sudoroot権限を取得するために使用します。php5_module (shared)Apacheが現在使用しているモジュールを見ると、古いmod_phpがまだインストールされており、mpm_workerまたはの使用をブロックしていますmpm_event


5
サーバーが起動していない場合、MODを取得するためにそれを実行することはできませんsudo a2dismod。MODを無効にできる場合は、タブ文字を2回押してリストを表示してみてください。あなたが表示された場合php5、それをディアブル。
プフェレル

2

私にとっては、debianで完全に動作します:

  1. プリフォークを無効にし、イベントを有効にします。 a2dismod mpm_prefork && a2enmod mpm_event
  2. mod-php5を削除します。 aptitude remove libapache2-mod-php5
  3. php_VHostの各オプションがによってカプセル化されていることに注意してください<IfModule mod_php5.c></IfModule>。そうしないと、Apacheが再起動しません。
  4. 行う service apache2 restart

1

Apache設定ファイルのLoad Modulesセクションで次を探します。

LoadModule mpm_event_module modules/mod_mpm_event.so

そして、次のモジュールに置き換えます:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

いいえ、これをしないでください!Apacheはモジュール式に構築されているため、LoadModule-Linesを構成に変更する必要はありません。のみ行うa2dismod mpm_prefork && a2enmod mpm_event。その後、Apacheを再起動すると完了です。
suther

0

php5モジュールにはプリフォークmpmが必要です。プリフォークを無効にするには、php5を無効にする必要があります。

debianでは、rootとして以下を行いました:

prefork mpmを無効にします

a2dismod mpm_prefork

イベントmpm、または任意のmpmを有効にします。注:イベントmpmはApache 2.2以前では推奨されませんでした。

a2enmod mpm_event

php5モジュールのロードを無効にしますが、アンインストールはしません。

a2dismod php5

結果のApache設定の全体的な正確性をテストします。上記の@sulther回答に従ってエラーに対処する必要があります。

apache2ctl -t

Apacheを再起動します

systemctl restart apache2

まだphpが必要な場合は、スレッドセーフバージョンをインストールする必要があります。参照:https : //www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-freebsd-12-0

がんばろう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.