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

  • 리눅스 hosts.allow 및 hosts.deny 설정

    리눅스 서버에서 특정 IP만 허용 및 특정 IP에 대한 차단을 위해 리눅스 hosts.allow 및 hosts.deny 설정을 각각 진행할 수 있습니다. iptables 방화벽에서 특정 IP만 SSH 접속을 허용하는 방법을 사용할 수 있지만 1개 이상의 IP가 SSH에 접속해야 하는 경우 hosts.allow 설정을 진행할 수 있습니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적…

  • [Linux] mod_ssl.so Apache 모듈 설치하기

    아파치를 사용하는 리눅스 서버에 SSL을 적용하려고 할 때 아피치 모듈 중 mod_ssl.so가 설치되어 있어야 합니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적 모드 설정🔲 www.conf 최종 설정(개별 호스팅)🔲 slowlog 설정🔲 Apache 통합하기🔲 소캣 설정🔲 상태 확인 및 서버 재시작 시 자동 구동 설정✅ mod_ssl.so 설치 ✅ 서버…

  • Linux란? 리눅스의 특징 및 리눅스의 종류

    목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적 모드 설정🔲 www.conf 최종 설정(개별 호스팅)🔲 slowlog 설정🔲 Apache 통합하기🔲 소캣 설정🔲 상태 확인 및 서버 재시작 시 자동 구동 설정■ ‘Linux’란? -simple ‘Linux’ 는 유닉스의 무료 버전(오픈소스)으로 이해하면 된다.  유닉스는1969년 벨 연구소에서 만들어졌습니다.  리눅스는 1991년 8월 리누스 토르발스가 어셈블리어로…

  • [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…

  • [Linux] ip 명령어 : 네트워크 인터페이스 및 설정 관리

    ip 명령어는 리눅스에서 네트워크를 관리할 때 사용되는 주요 도구로, 다양한 네트워크 작업을 수행할 수 있습니다. ip 명령어는 네트워크 인터페이스의 상태를 확인하거나 활성화 및 비활성화 할 수 있으며, IP 주소를 확인하거나 수동으로 추가 및 삭제하는 작업도 가능합니다. 또한 라우팅 테이블을 조회하고 경로를 추가하거나 제거하는 등의 라우팅 관리, ARP 테이블 확인 및 수정, 터널링 설정…

  • 리눅스 YUM 개념과 기본 명령어

    YUM(Yellow dog Updater, Modified)은 레드햇(RPM) 계열 리눅스 배포판에서 사용되는 패키지 설치 및 관리 도구입니다. 기존의 RPM 방식은 패키지 설치 시 의존성 문제로 사용자가 필요한 도구를 일일이 설치해야 하는 번거로움이 있었습니다. YUM은 이러한 의존성 문제를 자동으로 해결해 주며, 필요한 패키지와 관련된 의존 패키지를 함께 설치하여 오류를 최소화합니다. 의존성이 존재할 때 관련된 다른 패키지들을 자동으로…

답글 남기기

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

Prove your humanity: 8   +   1   =