스레드 안전 PHP로 우분투 14.04에서 이벤트 MPM Apache 2.4를 활성화하는 방법은 무엇입니까?


25

기본 아파치 설치가 새로운 이벤트 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의 구성 파일이 다르기 때문에 올바른 위치에서 수행하는지 확실하지 않습니다.

apache2 event-mpm을 사용할 수 있도록 PHP 스레드를 안전하게 만드는 방법에 대한 아이디어가 있습니까? (물론 PHP를 수동으로 다시 컴파일하지 않아도 됨)

답변:


39

비활성화하려면 event MPM다음을 수행 sudo a2dismod mpm_event한 후 활성화 prefork해야합니다 sudo a2enmod mpm_prefork.

마지막으로 아파치를 다시 시작하십시오.

sudo service apache2 restart

3
당신은 거기에 있어야합니다 ... 여기에 .. 거기에 .. 대답 목록의 상단에.
Karma

2
이것이 정답입니다! 이렇게 한 후에 아파치를 다시 시작하는 것을 잊지 마십시오 :sudo service apache2 restart
Reeno

4
OP가 요청한 것처럼 MPM을 활성화하는 방법에 대한 질문에 어떻게 대답합니까? OP가 요청한 것과 반대되는 방법을 설명하고 있습니다.
Craig

2
@Mehraban, OP는 "이벤트 MPM 활성화 방법"이라는 단어를 물었고 "답변 MPM 비활성화"입니다. 이것이 어떻게 받아 들일만한 대답입니까?
Nicolas Bouliane

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

필요한 경우 sudo루트 권한을 얻는 데 사용하십시오 . 당신이 볼 경우 php5_module (shared)아파치가 현재 사용하고있는 모듈 중, 기존의 방법 mod_php가 여전히 설치 및 사용에서 블록을한다 mpm_workermpm_event.


5
서버가 시작되지 않으면 모드를 가져 오기 위해 실행할 수 없습니다 sudo a2dismod. 탭 문자를 두 번 눌러 비활성화 할 수있는 모드가 있는지 확인하십시오. 당신이 php5그것을 볼 수 있다면 .
pferrel

2

나를 위해 데비안에서 완전히 작업하십시오.

  1. 프리 포크 비활성화, 이벤트 활성화 : a2dismod mpm_prefork && a2enmod mpm_event
  2. mod-php5를 제거하십시오 : aptitude remove libapache2-mod-php5
  3. php_의해 VHost 캡슐화에 각 옵션이 있으며 <IfModule mod_php5.c></IfModule>, 그렇지 않으면 아파치가 다시 시작되지 않습니다.
  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-Line을 구성으로 변경할 필요가 없습니다. 만하십시오 a2dismod mpm_prefork && a2enmod mpm_event. 그런 다음 아파치를 다시 시작하면 완료됩니다.
17:10에 suther

0

php5 모듈은 prefork mpm을 필요로하며 prefork를 비활성화하려면 php5를 비활성화해야합니다.

데비안에서 루트로 다음을 수행했습니다.

프리 포크 mpm 비활성화

a2dismod mpm_prefork

mpm 이벤트 또는 원하는 mpm을 활성화하십시오. 참고 이벤트 mpm이 아파치 2.2 이하 버전에 권장되지 않음

a2enmod mpm_event

php5 모듈로드를 비활성화하지만 제거하지는 않습니다.

a2dismod php5

결과 아파치 구성의 전반적인 정확성을 테스트합니다. 위 의 @sulther답변 에 따라 오류를 해결해야합니다 .

apache2ctl -t

아파치를 다시 시작

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.