PHP-FPM (FastCGI Process Manager) 이란?

PHP 스크립트를 실행하는 데 사용되는 PHP용 대체 FastCGI 구현입니다. 이를 통해 PHP 프로세스를 보다 잘 관리할 수 있으며 높은 트래픽 부하를 보다 효율적으로 처리할 수 있도록 하여 PHP 애플리케이션의 성능을 향상시킬 수 있습니다. PHP-FPM은 일반적으로 Nginx 및 Apache와 같은 웹 서버와 함께 사용되어 동적 웹 페이지를 제공하고 보다 빠르고 안정적이며 효율적인 PHP 환경을 제공합니다.

 

웹서버는 정적인 HTML 웹문서 파일만을 처리하며, 동적인 페이지 구현을 위해서는 외부 프로그램을 이용해야 합니다.

이를 위해 CGI 방식을 사용할 수 있는데, 이는 요청할 때마다 새로운 프로세스를 생성하여 구동하기에 부하가 많아지면 처리 속도가 느려질 수 있습니다.

이를 해결하기 위해 나온 것이 FastCGI 방식으로, 이미 생성한 프로세스를 재활용하여 처리속도가 빠릅니다.

PHP FastCGI Process Manager인 php-fpm은 이 FastCGI 방식을 구현한 것으로, CGI와 비교해 보다 빠른 성능을 보여줍니다.

 

PHP-FPM 적용방법

Apache에서 PHP-FPM을 사용하려면 PHP와 PHP-FPM을 모두 설치한 다음 Apache가 PHP-FPM과 함께 작동하도록 구성해야 합니다. 

1. PHP, PHP-FPM 설치

apt-get 또는 yum과 같은 운영 체제의 패키지 관리자를 사용하여 PHP를 설치하거나 소스에서 컴파일할 수 있습니다.

yum install php php-fpm -y


2. PHP-FPM 구성

php-fpm.conf 파일을 편집하여 PHP-FPM을 구성해야 합니다. 이 파일에는 수신 주소, 수신 포트 및 기타 PHP-FPM 옵션과 같은 설정이 포함되어 있습니다.

- www.conf의 내용을 아래와 같이 변경 (socket 방식 연동)

# vi /etc/php-fpm.d/www.conf

listen = /var/run/php-fpm/default.sock

listen.owner = apache
listen.group = apache

※ 참고
php-fpm 연동은 1) 소켓 방식과 2) tcp port 방식이 있는데, socket 방식이 더 빠르다고 함.
같은 서버 내에서 연동하는 경우는 socket 방식을,
다른 서버와 연동해야 하는 경우는 tcp port 방식을 사용하면 될 듯.

 

- 폴더 생성

/var/fun/php-fpm 폴더가 없다면 생성합니다.

mkdir /var/run/php-fpm


3. Apache 구성

mod_fastcgi 또는 mod_fcgid Apache 모듈을 설치한 후 Apache conf 파일을 수정해야 합니다.

- mod_fcgid 설치

yum install mod_fcgid -y

- php.conf 에 아래 내용 추가

# vi /etc/httpd/conf.d/php.conf

<Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
    	ProxySet disablereuse=off
</Proxy>
 
<FilesMatch \.php$>
	SetHandler proxy:fcgi://php-fpm
</FilesMatch>
 
AddType text/html .php
 
DirectoryIndex index.php
 
<FilesMatch \.phps$>
	SetHandler application/x-httpd-php-source
</FilesMatch>

 

4. SSL 구성

SSL 보안접속을 사용하고 있다면, SSL conf 파일도 수정해주어야 합니다.

- ssl.conf 파일도 아래 내용 반영 (파일 마지막에, VirtualHost 태그 닫히기 전에 php-fpm 설정 내용 추가)

# vi /etc/httpd/ssl.conf

# [...]
#   Per-Server Logging: 
#   The home of a custom SSL log file. Use this when you want a 
#   compact non-error SSL logfile on a virtual host basis. 
CustomLog logs/ssl_request_log \ 
         "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 
         
# configuration for php-fpm start
<Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm"> 
  ProxySet disablereuse=off 
</Proxy> 
<FilesMatch \.php$> 
  SetHandler proxy:fcgi://php-fpm 
</FilesMatch>
# configuration for php-fpm end

</VirtualHost>

 

5. php-fpm 서비스 등록 및 실행

systemctl enable php-fpm
systemctl start php-fpm

 

6. apache 재시작

systemctl restart httpd

 

7. 사이트 접속하여 정상 동작하는지 확인

 

참고

https://docs.rockylinux.org/ko/guides/web/php/

https://wallydev.com/posts/4602d549-ecbd-11ed-a8d7-06aa2d67633f

https://www.baragi.net/bbs/board.php?bo_table=dev&wr_id=8771

https://serverok.in/centos-7-apache-use-php-fpm

https://webhostinghero.org/centos-apache-php-fpm/

 

+ Recent posts