Làm cách nào để kích hoạt sự kiện MPM Apache 2.4 trên Ubuntu 14.04 với luồng PHP an toàn?


25

Tôi đã nâng cấp lên Ubuntu Server 14.04 với mong muốn cài đặt apache mặc định sẽ sử dụng MPM sự kiện mới, nhưng thay vào đó tôi tìm thấy prefork ăn bộ nhớ cũ.

Tôi đã thiết lập thành công MPM sự kiện trong Arch Linux, nhưng tôi không làm như vậy trên Ubuntu. Tôi tiếp tục nhận được:

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

Tôi đã cài đặt php-fpmvà định cấu hình apache2 để sử dụng nó, nhưng vì các tệp cấu hình cho apache2 khác với Ubuntu, nên tôi không chắc liệu mình có đang thực hiện đúng nơi không.

Có ý tưởng nào về cách làm cho luồng PHP an toàn để tôi có thể sử dụng apache2 event-mpm không? (tất nhiên không phải biên dịch lại thủ công php)

Câu trả lời:


39

Để vô hiệu hóa event MPM, bạn có thể làm sudo a2dismod mpm_eventvà sau đó để kích hoạt prefork, bạn nên làm sudo a2enmod mpm_prefork.

Cuối cùng khởi động lại apache:

sudo service apache2 restart

3
Bạn cần phải ở đó ... Không phải ở đây .. ở đó ... trên đầu danh sách Câu trả lời.
Karma

2
Đây phải là câu trả lời được chấp nhận! Đừng quên khởi động lại apache sau khi làm điều này:sudo service apache2 restart
Reeno

4
Làm thế nào điều này trả lời câu hỏi làm thế nào để kích hoạt MPM, như OP đã hỏi? Bạn đang giải thích cách làm ngược lại với những gì OP yêu cầu.
Craig

2
@Mehraban, OP đã hỏi từng từ "Cách bật MPM sự kiện?" Và câu trả lời của bạn là "Chỉ cần tắt MPM sự kiện". Làm thế nào đây là một câu trả lời chấp nhận được?
Nicolas Bouliane

1
@Mehraban Đó không phải là câu hỏi đã được hỏi, vì vậy tất cả lưu lượng truy cập đến đây từ Google sẽ được thông báo "cách tốt nhất để làm X là không làm với X". Nếu tôi hỏi làm thế nào để làm bánh quy sô cô la, tôi mong đợi một công thức bánh quy sô cô la.
Nicolas Bouliane

13

Điều này làm việc cho tôi.

Trước tiên hãy kiểm tra xem bạn đã cài đặt gói này chưa:

dpkg -l | grep libapache2-mod-php5

Nếu bạn có nó chỉ cần loại bỏ nó:

apt-get remove libapache2-mod-php5

Đây là câu trả lời chính xác!
DrSvanHay

6

Bạn có thể cài đặt song song nhiều cách để Apache giao tiếp với PHP. Có thể bạn đã (vẫn) cài đặt mod_php cũ, ngoài ra còn có fastcgi / php-fpm.

Bạn có thể xem các mô-đun mà Apache của bạn đã tải trong thời gian chạy với

apache2ctl -M

Nếu cần, sử dụng sudođể có được quyền root. Nếu bạn thấy php5_module (shared)trong số các mô-đun mà Apache của bạn hiện đang sử dụng, mod_php cũ vẫn được cài đặt và chặn bạn sử dụng mpm_workerhoặc mpm_event.


5
Không thể chạy nó để nhận mod nếu máy chủ không khởi động, hãy thử sudo a2dismodsau đó nhấn ký tự tab hai lần để xem danh sách nếu mod có thể bị tắt. Nếu bạn thấy php5nó đáng tin cậy.
pferrel

2

Đối với tôi sau khi làm việc đầy đủ về debian:

  1. Vô hiệu hóa prefork, kích hoạt sự kiện: a2dismod mpm_prefork && a2enmod mpm_event
  2. xóa mod-php5: aptitude remove libapache2-mod-php5
  3. Xin lưu ý rằng bạn có mỗi php_Tùy chọn trong Vhost của mình được gói gọn <IfModule mod_php5.c></IfModule>, nếu không, apache sẽ không khởi động lại
  4. làm service apache2 restart

1

Tìm phần sau trong phần Tải mô-đun trong tệp cấu hình apache của bạn:

LoadModule mpm_event_module modules/mod_mpm_event.so

Và thay thế nó bằng các mô-đun sau:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

KHÔNG, đừng làm điều này! Apache được xây dựng theo mô-đun, do đó bạn không phải thay đổi bất kỳ LoadModule-Lines nào thành cấu hình của mình. Chỉ làm a2dismod mpm_prefork && a2enmod mpm_event. Sau đó khởi động lại apache của bạn, và bạn đã hoàn tất.
Suther

0

mô-đun php5 cần mpm prefork và để vô hiệu hóa prefork, người ta phải vô hiệu hóa php5.

theo debian, tôi đã làm như sau, với quyền root:

vô hiệu hóa mpm prefork

a2dismod mpm_prefork

bật mpm sự kiện, hoặc bất cứ thứ gì bạn có thể thích. lưu ý tôi tìm thấy sự kiện mpm không được khuyến nghị cho apache 2.2 hoặc sớm hơn

a2enmod mpm_event

để vô hiệu hóa tải mô-đun php5, nhưng không cần gỡ cài đặt.

a2dismod php5

để kiểm tra tính chính xác tổng thể của cấu hình apache kết quả. các lỗi sẽ cần phải được xử lý theo câu trả lời của @sulther ở trên.

apache2ctl -t

khởi động lại apache

systemctl restart apache2

trong trường hợp php vẫn cần thiết, nên cài đặt phiên bản threadafe. xem: https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-freebsd-12-0

chúc may mắn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.