php7.0-fpm이 Ubuntu 16.04에서 Apache와 작동하는지 확인하려고 합니다.

php7.0-fpm이 Ubuntu 16.04에서 Apache와 작동하는지 확인하려고 합니다.

Ubuntu 16.04에서 Apache와 작동하도록 php7.0-fpm을 구성했지만 올바르게 구성되어 작동하는지 확실하지 않습니다.

내가 이해한 대로 설치 및 구성 후 php info 파일의 출력에는 "Server API --> FPM/FastCGI"가 표시되어야 하지만 여전히 "Server API --> Apache 2.0 Handler"가 표시됩니다.

이것이 내가 php7.0-fpm을 설치하고 구성한 방법입니다:

sudo apt-get install libapache2-mod-fastcgi php7.0-fpm

sudo a2enmod actions fastcgi alias

sudo a2enconf php7.0-fpm

sudo service php7.0-fpm restart

sudo systemctl status php7.0-fpm

sudo systemctl restart apache2.service

다음은 sudo systemctl status php7.0-fpm의 출력입니다.

php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-11-25 11:57:33 UTC; 23h ago
Process: 1149 ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf (code=exited, status=0/SUCCESS)
Main PID: 1336 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3
Memory: 37.8M
CPU: 3.089s
CGroup: /system.slice/php7.0-fpm.service
├─1336 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─1340 php-fpm: pool www
└─1341 php-fpm: pool www

Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Nov 25 11:57:33 ip-10-0-0-126 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

내가 도대체 ​​뭘 잘못하고있는 겁니까? 도움과 조언을 주시면 감사하겠습니다.

/etc/apache2/conf-enabled/php7.0-fpm.conf아래는 내 파일 의 내용입니다 .

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

답변1

스톡 conf 파일을 적용하려면 proxy_fcgi모듈을 활성화하고 비활성화 해야 합니다 .mod_php7php7.0-fpm

을 보면 /etc/apache2/conf-enabled/php7.0-fpm.conf상단에 다음과 같은 내용이 표시됩니다.

<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>

답변2

나는 다음 지침에 따라 큰 문제 없이 이 작업을 수행할 수 있었습니다.Koen Reiniers의 개발 블로그. 나는 지침을 거의 정확하게 따랐으며, 블로그 게시물 댓글에 언급된 한 가지 예외를 제외하고는 완벽하게 작동했습니다. 필요할 것이예요mod_fastcgi, 기타 여러 모듈도 포함됩니다. 이 레시피를 사용하면 각각 독립적인 php7 fpm 구성을 사용하는 여러 개의 가상 호스트를 설정할 수 있습니다. 않는 한 참고하세요PHP정보()"FPM/FastCGI"의 서버 API가 표시되고 있는데 표시를 놓친 것입니다. 이것은 스택이 작동하는지에 대한 산성 테스트입니다. 확인 차원에서 "<?php touch('/tmp/fpmtest');"도 실행해 보았습니다. 내 가상 호스트에 대해 시작된 프로세스가 지정된 사용자/그룹으로 실행되고 있는지 확인합니다.

이 레시피는 약간의 수정을 거쳐 Koen의 블로그에서 복사되었으며 그의 명확하고 효과적인 지침에 대한 공로는 Koen의 블로그에 있습니다.

보안 관련 스탠자를 제외하고는 다음을 수행합니다.~ 아니다Apache conf를 활성화하고 싶습니다php7.0-fpm이 레시피를 사용한다면. 전역적으로 실행되어야 하는 유일한 코드는 다음과 같습니다.

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

Apache2 구성이 활성화된 경우mod_cgi.c그렇다면 이는 모듈의 기본 conf 파일에서 이미 처리되었을 것입니다. 그렇지 않은 경우 이 모듈(또는mod_cgid.c)이 아직 활성화되어 있지 않으면 Apache2 시작 시 실행되는 모든 conf 파일에 추가할 수 있습니다. 하지만 서버 환경에 따라 PHP-FPM이 실행되는 각 <VirtualHost>에만 추가하는 것이 더 안전할 수 있습니다. 활성화되었습니다. 보안 관련 코드php7.0-fpm.conf동일한 위치에 복사하거나 전역적으로 활성화할 수도 있습니다.

이 가이드에서는 Ubuntu 서버에서 Apache(가상 호스트 포함)와 PHP 7.0.*이 실행되고 있다고 가정합니다. 또한 적절한 백업이 없는 프로덕션 환경에서는 이 작업을 시도하지 마십시오.

먼저 확인하세요php7.0-fpm시스템에 설치되어 있습니다:

$ sudo apt-get install php7.0-fpm

설치한 후 자동으로 시작되지 않은 경우 서비스를 시작하고 실행 중인지 확인합니다.

$ sudo service php7.0-fpm start && ps aux | grep php-fpm

각각의 모든 가상 호스트에 대해 PHP-FPM을 사용하려면 이를 여러 개의 리소스 풀로 분할해야 합니다. 즉, 각 <VirtualHost> 사용자마다 하나씩, 즉 여러 호스트가 한 사용자에게 할당된 경우 해당 사용자에 대해 하나의 리소스 풀을 생성합니다.

PHP-FPM 풀 구성의 기본 위치는 다음과 같습니다.

/etc/php/7.0/fpm/pool.d/

사용자 중 한 명에 대한 새 구성을 생성하려면 새 .conf 파일을 생성하면 됩니다. 사용자 이름을 구성 파일 이름으로 사용했습니다.

$ sudo vim /etc/php/7.0/fpm/pool.d/username.conf

그리고 이것을 구성으로 사용하십시오("username"을 실제 사용자 이름으로 바꾸십시오).

[username]
    user = username
    group = username
    listen = /run/php/php7.0-fpm.username.sock
    listen.owner = username
    listen.group = username
    listen.mode = 0666

    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3

처음 7줄이 가장 중요합니다. Apache 가상 호스트 사용자와 동일한지 확인하십시오. 마지막 5줄은 프로세스 관리자의 기본 설정입니다. 단순함을 위해 그대로 두지만 원하는 대로 변경할 수 있습니다. 다음 위치에 있는 기본 구성 파일에서 이러한 설정에 대한 자세한 내용을 읽을 수 있습니다.

/etc/php/7.0/fpm/pool.d/www.conf

남은 유일한 일은 Apache에게 mod_php 대신 PHP-FPM을 사용하도록 지시하는 것입니다. 먼저 mod_actions와 mod_fastcgi가 모두 활성화되어 있는지 확인하십시오.

$ sudo a2enmod actions fastcgi
$ sudo service apache2 restart

Apache에 PHP-FPM fastcgi 처리기를 추가합니다. PHP-FPM을 사용할 수 있기를 원하는 모든 사용자에 대해 이 작업을 수행해야 합니다. 일반적으로 다음 위치에서 사용자 이름에 대한 가상 호스트별 파일을 편집합니다.

/etc/apache2/sites-available/username.conf

상단에 다음을 추가합니다.

<IfModule mod_fastcgi.c>
  AddHandler php7-fcgi-username .php
  Action php7-fcgi-username /php7-fcgi-username
  Alias /php7-fcgi-username /usr/lib/cgi-bin/php7-fcgi-username
  FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-username -socket /run/php/php7.0-fpm.username.sock -pass-header Authorization
</IfModule>

다시, "username"을 가상 호스트 사용자의 실제 이름으로 바꾸십시오.

실제로 .php 파일에 사용하도록 가상 호스트에 지시해야 하므로 동일한 파일에서 <VirtualHost> 지시문에 다음 줄을 추가합니다.

<IfModule mod_fastcgi.c>
  <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler php7-fcgi-username
  </FilesMatch>
</IfModule>

"username"을 실제 가상 호스트 사용자의 이름으로 다시 바꾸고 파일을 저장하십시오. 그것은매우 중요SetHandler 지시문은 Apache 조건부 파일 시스템 컨테이너 태그의 하위 집합인 <Location>, <LocationMatch>, <Files> 또는 <FilesMatch>와 함께 작성되어야 합니다. 이를 생략하면 SetHandler가 무시됩니다. <Directory> 태그가 잘리지 않는 것 같습니다.

PHP-FPM의 "상태" 및 "핑" 기능을 활용하고 가상 호스트별 풀 파일에서 해당 기능을 활성화하려면/etc/php/7.0/fpm/pool.d디렉토리(참조/etc/php/7.0/fpm/pool.d/www.conf자세한 내용은) Apache2 설정에 두 가지 추가 수정이 필요합니다. 그만큼행동가상호스트별 .conf 파일 상단의 지시문은 "virtual"로 끝나야 합니다. 따라서:

Action php7-fcgi-username /php7-fcgi-username virtual

또한 SetHandler 래퍼는 이러한 가상 파일을 포함하는 정규식을 지정해야 합니다. 나는 다음을 사용합니다 :

<LocationMatch ".+\.ph(p[3457]?|t|tml)|/(ping|status)$">
    SetHandler ....
</LocationMatch>

이제 남은 것은 Apache가 구성 파일을 다시 로드하도록 하는 것입니다.

$ sudo service apache2 reload

변경 사항이 적용되었는지 확인하려면 웹사이트의 공개 디렉터리에 phpinfo.php 파일을 만들고 브라우저에서 방문하세요.

&lt;?php phpinfo();

페이지 상단 근처에 표시된 서버 API에 "FPM/FastCGI"가 표시되어야 합니다.

프로세스를 완료하려면 각 가상 호스트에 대해 단계를 반복해야 합니다. 완전히 확신할 때mod_php더 이상 사용되지 않습니다. 다음을 통해 비활성화할 수 있습니다.

$ sudo a2dismod php7.0

이 작업을 완료할 때까지 Apache는 모든 요청에 ​​대해 PHP 프로세스를 계속 포함합니다. 즉, 메모리 사용량은 동일하게 유지되고 더 높을 수도 있습니다.

관련 정보