PHP-FPM이란 | PHP-FPM 설치 및 설정

PHP-FPM을 시작하기 전에 CGI에 대해 알아야 합니다. CGI(Common Gateway Interface)는 웹 서버와 외부 프로그램 사이의 상호작용을 위한 표준 프로토콜이며, 웹 서버는 사용자 요청에 따라 동적으로 콘텐츠를 생성하거나 데이터를 처리할 수 있습니다. 요청이 들어올 때 마다 각각의 요청으로 CGI가 생성되게 되어 서버의 속도는 느려질 수 밖에 없습니다.

CGI(Common Gateway Interface)의 업그레이드 버전으로 서버의 성능을 올릴 수 있는 다양한 방법이 있는데 Node.js, Django와 같은 프레임워크로 대체되거나, CGI의 단점을 보완한 FastCGI 등 다양한 기능이 있습니다. FastCGI를 사용하기 위해 PHP-FPM((FastCGI Process Manager)을 설치해서 사용하게 되며, PHP-FPM은 PHP 5.3.3 버전부터 PHP에 통합되었습니다.

✅ PHP-FPM의 기능

주요 기능은 CGI가 하나의 요청에 대한 하나의 프로세스를 생성하기 때문에 서버의 부하 및 서버의 퍼포먼스가 안 좋아지는 것을 보완하여 만들어진 프로세스가 계속해서 새로운 요청을 처리해서 서버의 속도를 향상 시킵니다.

✅ PHP-FPM 설치

Nginx 또는 Apache 웹 서버에서 주로 이용하는 PHP 설치는 Apache 서버 기준이며, APM은 이미 설치가 완료된 상태입니다.

dnf로 php 설치 시 같이 설치되었으며,

~]# rpm -qa | grep php-fpm
php-fpm-8.3.7-1.el9.remi.x86_64

PHP는 설치되었지만 설치가 되어 있지 않은 경우 설치를 진행할 수 있습니다.

~]# dnf -y php-fpm 

✅ PHP-FPM 설정(Apache 설치 서버)

설치가 되었다면 두 개의 설정 파일을 확인할 수 있습니다. www.conf 파일의 listen.owner와 그룹의 userid.nobody로 설정했습니다. 현재 운영 중인 서버의 아파치 설정 자체가 이미 nobody이기 때문이며, nobody 설정이 아닌 apache 설절으로 httpd.conf에 잡혀 있는 경우 apahe로 설정해야 합니다.

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

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

listen.owner = userid
listen.group = nobody
listen.mode = 0660

## 기본으로 설정된 값
listen = 127.0.0.1:9000
# 위와 같이 설정되어 있을 수 있는데 로컬에서만 접속이 되는 
# 설정이기 때문에 아래와 같이 변경할 수 있습니다.
# 아래의 설정은 설치한 php-fpm 8.3 버전의 기본 값이었습니다.
listen = /run/php-fpm/www.sock

## 정적 또는 동적 구성 - php-fpm 프로세스는 정적 또는 동적으로 구성할 수 있습니다. ##

🔲 정적 모드 및 동적 모드 설정

PHP_FPM의 핵심이라고 할 수 있는 정적 모드 설정과 동적 모드 설정 방법입니다.

정적 모드에서는 자식 프로세스의 수가 pm.max_children 값에 의해 설정됩니다. 최대 120개의 자식 프로세스를 가지게 되는 설정입니다.

동적 모드가 기본 세팅일 가능성이 큽니다. 동적 모드는 더 많은 옵션을 제공합니다. 최소 6개의 자식 프로세스, 최대 18개의 자식 프로세스를 여분으로 가지는 것으로 설정했습니다.

추가로 php.ini 설정도 같이 한다면 구동하는 서버에 맞게 메모리 설정을 진행해 줍니다.

마지막으로 ondemand 모드라는 세 번째 운영 모드도 있습니다. 이 모드는 요청을 받을 때만 프로세스를 시작합니다. 강력한 영향을 받는 사이트에는 최적의 모드가 아니며, 특정한 필요에 따라서만 사용해야 합니다.

🔲 www.conf 최종 설정(개별 호스팅)

vi /etc/php-fpm.d/myHostID.conf

[myHostID]
user = myHostID
group = nobody
listen = /run/php-fpm/myHostID.sock
listen.owner = myHostID
listen.group = nobody
listen.mode = 0660
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
chdir = /home/myHostID/www

🔲 slowlog 설정

slowlog 설정을 체크합니다. 0은 비활성 상태이며, 1,2(초) 숫자로 변경할 수 있습니다.

🔲 Apache 통합하기

# 개별 호스팅 계정 설정 시 roxyPass 둘 중 하나 또는 ProxyPassMatch 설정
<VirtualHost *:80>
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    DocumentRoot /home/호스트/www

   <Directory /home/호스트ID/www>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
  </Directory>
<FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php-fpm/호스트ID.sock|fcgi://localhost"
        </FilesMatch>
</VirtualHost>

🔲 소캣 설정

chown 호스트ID.nobody /run/php-fpm/호스트ID.sock
chmod 660 /run/php-fpm/호스트ID.sock

🔲 상태 확인 및 서버 재시작 시 자동 구동 설정

~]# systemctl enable php-fpm
~]# systemctl status php-fpm
 php-fpm.service - The PHP FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; preset: >
     Active: active (running) since Wed 2024-07-03 10:20:44 UTC; 2 weeks 0 days>
   Main PID: 597 (php-fpm)
     Status: "Processes active: 0, idle: 12, Requests: 6168, slow: 0, Traffic: >
      Tasks: 13 (limit: 11903)
     Memory: 284.3M
        CPU: 3min 29.098s
     CGroup: /system.slice/php-fpm.service
             ├─   597 "php-fpm: master process (/etc/php-fpm.conf)"
             ├─  1086 "php-fpm: pool www"
             ├─  1087 "php-fpm: pool www"
             ├─  1088 "php-fpm: pool www"
             ├─  1089 "php-fpm: pool www"
             ├─  1090 "php-fpm: pool www"
             ├─  1770 "php-fpm: pool www"
             ├─ 81641 "php-fpm: pool www"
             ├─ 86359 "php-fpm: pool www"
             ├─105777 "php-fpm: pool www"
             ├─105815 "php-fpm: pool www"
             ├─153738 "php-fpm: pool www"
             └─167094 "php-fpm: pool www"

Jul 17 00:55:05 ip-172-26-6-43.ap-northeast-2.compute.internal sendmail[278038]>
Jul 17 00:55:05 ip-172-26-6-43.ap-northeast-2.compute.internal sendmail[278038]>
lines 2-25
리눅스 기초(The Linux Foundation)

Similar Posts

  • 리눅스 less 명령어 사용법

    리눅스 less 명령어는 텍스트 파일을 볼 때 사용하는 명령어입니다. less 명령어의 특징은 vi 명령어가 파일 실행 시 전체 파일을 읽어야 하고 txt 파일 크기가 클 경우 읽는데 시간이 걸립니다. 또한 vi 명령어는 파일 편집 명령어입니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적 모드 설정🔲 www.conf 최종 설정(개별…

  • [Linux] CentOS 7 yum repo 변경(EOS)

    CentOS 7의 공식 EOS 날짜는 2024년 6월 30일로 종료되면서 기본 저장소가 비활성화되었기 때문에, yum 명령어 실행 시 저장소를 찾지 못해 오류가 발생합니다. CentOS 7 yum repo 변경을 한 후에 문제 해결이 가능합니다. CentOS 7에서 EOS(End of Support)에 따라 CentOS 7을 처음 설치 시 설정 된 yum 명령어 실행 시 One of the configured…

  • certbot 명령어(인증서 관리 및 삭제)

    Alma Linux에서 이 사이트에 Certbot 설치 및 갱신 설치를 해 진행하는 중 인증서 삭제 후 재설치를 할 이유가 생겨 삭제와 함께 나머지 Certbot 명령어 사용법에 대해 체크하게 되었습니다. certbot 명령어는 다음 페이지에서 확인했습니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적 모드 설정🔲 www.conf 최종 설정(개별 호스팅)🔲 slowlog…

  • 리눅스 파티션 설정 방법: gdisk 명령어

    리눅스 파티션 설정(생성과 수정, 삭제)을 진행할 때 fdisk 명령어 또는 gdisk 명령어를 사용합니다. gdisk를 이용한 파티션 정보 편집에 대해 다뤄 보겠습니다. 마운트 하기 전 파티션의 설정은 다음과 같은 순서로 진행됩니다. 저장 후 종료 전까지 파티션 작업 내용은 디스크에 반영되지 않습니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적…

  • SSL 인증서 설치(Sectigo)

    Apache 웹 서버에 Sectigo SSL 인증서 설치를 진행합니다. 테스트 URL로 서브 도메인 tozisin.com으로 하여 설치 테스트를 진행합니다. 설치할 인증서는 설치 후 30일 간 이용 가능한 ‘Free 30Days SSL‘ 설치를 진행합니다. AlmaLinux 9.4는 Rocky Linux 9.4와 완전히 호환되는 RHEL 계열의 클론입니다. 따라서 Apache 설치 및 모듈 구성 방식도 Rocky Linux와 동일합니다. Apache 버전은 2.4.57입니다….

  • 리눅스 top 명령어(CPU, 메모리 점유율 확인)

    리눅스 top 명령어는 구동 중인 OS의 상태를 보여주는 명령어이며 table of processes의 뜻을 가지고 있습니다. 총 메모리 사용량, CPU 사용량 등을 보여주며 각 프로세스의 구체적인 메모리와 CPU 사용량을 개별적으로 확인할 수 있습니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적 모드 설정🔲 www.conf 최종 설정(개별 호스팅)🔲 slowlog 설정🔲…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 3   +   7   =