터미널을 통해 Ubuntu 12.04에서 PHP를 FastCGI로 실행하도록 Apache를 구성하는 방법은 무엇입니까?


35

나는 유닉스 커맨드 라인 웹 서버 관리 / 관리의 세계에 비교적 익숙하지 않습니다.

제어판 관리 옵션이있는 많은 호스트를 사용하면 간단한 옵션으로 PHP 실행 방법을 변경할 수 있습니다.

가장 일반적인 옵션은 다음과 같습니다.

  • 아파치 모듈
  • CGI 신청
  • FastCGI 응용 프로그램

내 질문은 간단하게 명령 줄을 통해 어떻게 변경합니까? 아파치에 대한 많은 구성 파일이 있다는 것을 알고 있습니다.

내가 찾은 가장 가까운 것은 이 질문 이지만 디렉토리 구조가 내 OS (Ubuntu 12.04)와 일치하지 않는 것 같습니다.

나는이 과정이 너무 일반적으로 보이는 세부 사항을 찾을 수있는 명확한 가이드가없는 것처럼 보이는 방법에 대해 당황했습니다. 이것이 있다면 저를 용서하십시오 ... 있다면, 올바른 방향으로 저를 가리켜주십시오.


내가 찾은 가장 가까운 것은 SO에 관한이 질문입니다 . 웹 사이트는 스택 오버플로가 아닙니다.
ta.speot.is는

1
에 FastCGI를 꽤 잘 설명합니다.

1
@ ta.speot.는 용서, pleaassuh 입니다. . 고마워 매트, 물론 나는 fastcgi.com을 보았지만 그 지침을 따르기가 약간 어렵다는 것을 알았습니다.
Evan Mattson

@ ta.speot.is, 간단한 오타. 그는 "SO"가 아닌 "SE"를 의미했습니다.
Pacerier

답변:


49

이전 답변에 감사드립니다. 가장 많은 방법을 얻었지만 작동하는 것을 얻으려면 몇 곳에서 명령을 결합해야하므로 완전한 명령 세트를 작성해야한다고 생각했습니다.

참고로 Ubuntu 14.04, Apache 2.4를 실행 중이며 기본적으로 modphp가 실행 중이므로 이전 지침에서도 modphp를 비활성화해야합니다.

또한 http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ 가 매우 유익하고 간단 하다는 것을 알았습니다 .

터미널에서 다음 명령을 차례로 실행하십시오.

먼저 필요한 패키지를 설치하십시오 (php5는 이미 설치되어 있다고 가정하므로 처음 설치할 때 다시 추가하십시오). 또한 Apache 2.4부터 worker 대신 event-mpm을 사용할 수 있습니다 . http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/를 참조 하십시오 . 내 예는 worker를 보여 주지만 오히려 그것을 사용하려면 worker라는 단어를 이벤트로 바꿉니다.

sudo apt-get install apache2-mpm-worker

sudo apt-get install libapache2-mod-fastcgi php5-fpm

이제 필요한 모드를 활성화하고 필요없는 모드를 비활성화하십시오.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

php5.fcgi 파일을 생성하고 웹 서버가 그것을 사용할 수있는 권한을 부여하십시오.

sudo touch /usr/lib/cgi-bin/php5.fcgi

sudo chown -R www-data:www-data /usr/lib/cgi-bin

php5-fpm에 대한 전역 설정 생성

sudo nano /etc/apache2/conf-available/php5-fpm.conf

다음에 붙여 넣습니다 (IP 주소 대신 소켓을 사용합니다)

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

php5-fpm conf 활성화

sudo a2enconf php5-fpm

아파치와 FPM을 다시 시작

sudo service apache2 restart && sudo service php5-fpm restart

다른 지침에 따라 다음을 웹 서버의 새로운 검색 가능한 PHP 파일에 붙여 넣으십시오.

<?php phpinfo();

웹 브라우저에서 방금 편집 한 파일을 엽니 다. 서버 API 옆에 "FPM / FastCGI"가 표시되면 이제 FastCGI와 함께 PHP를 제공하는 것입니다!


4
이것은 생명의 은인입니다. 이전 아파치에 대한 지침은 Ubuntu 14.04 및 아파치 2.4에서 작동하지 않았습니다. 그러나 이것은 매력처럼 작동했습니다. +100 !!
Bhavin Doshi

나는 이것을 정확하게 따랐지만 '/php5.fcgi/index에 액세스 할 수있는 권한이 없습니다'라는 오류가 발생합니다 ... 그리고 오류 로그에서 '서버 구성에 의해 클라이언트가 거부되었습니다 : / usr / lib / cgi-bin /php5.fcgi '... 어떤 아이디어?
Just Lucky 진짜로

알아 냈습니다 ... 나는 어떤 이유로 루트에 대해 오래된 '주문 거부, 허용'구성을 사용하고있었습니다 ... 모두 수정되었습니다 : D
Just Lucky 정말

패키지 및 구성 "apache2 : /etc/apache2/apache2.conf의 216 행에서 구문 오류가 발생했습니다 : /etc/apache2/conf-enabled/php5-fpm.conf의 9 행에서 구문 오류가 발생했습니다. </ Directory> 봤지만 </ IfModule> "
Farooq


20

마침내이 작업을 수행하는 데 도움이되는 멋진 자습서를 찾았습니다. LAMP 스택을 이미 설치 한 상태에서 취한 단계를 간략하게 설명하지만 전체 자습서는 여기 에서 찾을 수 있습니다 .

새로운 참고 사항 :

학습서에서는 다음을 사용하여 루트 사용자로 전환하여 시작합니다.

sudo su

필자의 경우 sudo사용자를 전환 하는 대신 해당 명령의 접두사를 사용 했기 때문에 단계를 문서화합니다.

시작

1 단계 : Apache Worker MPM (다중 처리 모듈) 설치

sudo apt-get install apache2-mpm-worker

이것은 내가 설치 한 prefork를 대체합니다. Apache를 설치할 때 기본값입니다.

2 단계 : PHP5 및 필요한 모듈 설치

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

이 시점에서 'libapache2-mod-fastcgi'설치 오류가 발생할 수 있습니다 :

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libapache2-mod-fastcgi is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or is only available from another source

E: Package 'libapache2-mod-fastcgi' has no installation candidate

이 부분은 위의 튜토리얼에 없습니다.

이를 조정하려면 multiverse저장소를 적절한 소스에 추가해야합니다.

이것을하기 위해:

sudo nano /etc/apt/sources.list

여기에 다음 줄을 추가했습니다.

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb http://security.ubuntu.com/ubuntu precise-security multiverse

precise이 경우 내 버전의 Ubuntu " Precise Pangolin "을 나타냅니다.

이제 변경 사항을 저장하고 터미널로 돌아갑니다.

sudo apt-get update

그리고 다시:

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

이제 작동합니다.

이제 다음 Apache 모듈을 활성화하십시오.

sudo a2enmod actions fastcgi alias

아파치를 다시 시작

sudo service apache2 restart

3 단계 : Apache 구성

Apache가 PHP-FPM과 작동하도록하려면 다음 구성이 필요합니다.

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted 
    </Directory>
    #directory statement mult be on multiple lines
</IfModule>

노트 :

이전 버전의 Apache (2.3.x 이상)를 사용하는 경우에는 라인을 생략하십시오.

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>

다음 명령으로 설치된 버전을 확인할 수 있습니다

apache2 -version

예를 들어 /etc/apache2/conf.d/php5-fpm.conf(이 파일은 존재하지 않으므로 생성해야 함)과 같이 전역 Apache 구성 (모든 vhost에 대해 활성화 됨 )에 배치하거나 PHP-FPM을 사용해야하는 각 호스트에 배치 할 수 있습니다.

전 세계 노선을 선택합니다.

sudo nano /etc/apache2/conf.d/php5-fpm.conf

위의 코드 블록에 붙여 넣고 저장하고 종료하십시오. 이 새 파일은 /etc/apache2/conf.d/디렉토리의 모든 파일을로드하는 Apache의 기본 구성에 의해 자동으로로드됩니다 .

Apache를 다시 시작하십시오.

sudo service apache2 restart

이제 문서 루트에 다음 PHP 파일을 작성하십시오 /var/www.

sudo nano /var/www/info.php

더하다:

<?php phpinfo();

저장하고 종료하십시오.

이제 우리는 브라우저에서 (예를 그 파일을 호출 http://your-server-ip/info.php)

상단의 서버 API 아래에이 표시 FPM/FastCGI됩니다.

성공!

기본 TCP 포트 대신 유닉스 소켓을 사용하도록 PHP-FPM을 변경하는 방법 또는 모든 가상 호스트 대신 개별 가상 호스트에 대해이를 구성하는 방법에 대한 자세한 내용은 맨 위에 링크 된 소스 자습서를 참조하십시오.


<디렉토리는 / usr / lib 디렉토리 / CGI-빈> 모두 허용 </ 디렉토리> 필요 : 나는 </ IfModule> 지시어도 전에 추가했다
리무 앳킨슨

@RimuAtkinson은 정확합니다. 기본적으로 모든 디렉토리는 최신 버전에서 금지되므로 cgi-bin 디렉토리에 대한 액세스 권한을 구체적으로 부여해야합니다. 그렇지 않으면 403을 얻을 수 있으므로 답변에 추가해야합니다.
johnrom

이 하우투에 감사드립니다! 이 사항은 Require all grantedApache 2.4 이후에만 필요합니다. Apache 2.2와 함께 구성 파일에 넣으면 실패합니다.
leemes

메모를 추가했습니다. 자세한 내용은 stackoverflow.com/a/22040167/592323
leemes에서

1
이 답변은 우분투 14.04에서는 작동하지 않습니다. 14.04에서 JDawgg의 답변을 참조하십시오.
Bhavin Doshi

1

우분투 14.04에서 허용 된 답변 단계를 수행 한 후 /etc/apache2/conf-available/php5-fpm.conf를 편집하십시오.

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

그런 다음 실행

#sudo a2enconf php5-fpm
#sudo apache2 restart

0

누군가 우분투 16.04 에서이 작업을 수행하고 PHP 7에서 PHP 5.6 (Ondrej)으로 다운 그레이드 한 경우 일부 줄을 바꿔야합니다 (JDawgg의 답변에 따라).

sudo apt-get 설치 libapache2-mod-fastcgi php5-fpm :

sudo apt-get install libapache2-mod-fastcgi php5.6-fpm 

sudo a2dismod php5 mpm_prefork :

sudo a2dismod php5.6 mpm_prefork

sudo nano /etc/apache2/conf-available/php5-fpm.conf는 다음과 같습니다.

sudo vim /etc/apache2/conf-available/php5.6-fpm.conf

php5.6-fpm의 설치 프로세스는 이미 파일을 만들었으므로 파일을 만들 필요가 없습니다. 그러나 mod_php5를 위해 해당 파일의 기존 텍스트를 모두 제거했습니다.

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

파일이 거기에있을 때 경로를 /var/run/php5-fpm.sock에서 /var/run/php/php5.6-fpm.sock으로 변경했습니다.

sudo a2enconf php5-fpm :

sudo a2enconf php5.6-fpm

sudo 서비스 apache2 재시작 및 & sudo 서비스 php5-fpm 재시작 :

sudo service apache2 restart && sudo service php5.6-fpm restart

나는 이것이 나와 같은 다른 초보자에게 도움이되기를 바랍니다 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.