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/
'개발 > PHP' 카테고리의 다른 글
[PHP] Composer 사용법 (0) | 2023.08.08 |
---|---|
PHP opcache 적용 (0) | 2023.02.20 |
[PHP] 윈도우에서 php 7.4로 업그레이드 및 VScode 디버깅 설정 (0) | 2023.02.07 |
[PHP] php7.2 에서 7.4로 버전업 (CentOS7, 워드프레스용) (0) | 2023.02.04 |
[PHP 메모리 부족] Fatal error: Allowed memory size of 134217728 bytes exhausted (0) | 2022.03.27 |