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

  • VirtualBox 복제 후 CentOS 7 네트워크 인터페이스 중복 문제 해결

    VirtualBox에 CentOS 7을 설치 후 복제 기능을 이용해서 CentOS 7을 복제 했습니다. 여기서 네트워크 인터페이스 중복 문제가 발생하여, 이 내용에 대해 확인해 봤습니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적 모드 설정🔲 www.conf 최종 설정(개별 호스팅)🔲 slowlog 설정🔲 Apache 통합하기🔲 소캣 설정🔲 상태 확인 및 서버 재시작…

  • opcache 설치 및 설정

    목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적 모드 설정🔲 www.conf 최종 설정(개별 호스팅)🔲 slowlog 설정🔲 Apache 통합하기🔲 소캣 설정🔲 상태 확인 및 서버 재시작 시 자동 구동 설정▧ opcache 설치 및 설정 opcache 설치 및 설정’ 방법에 대해 …OS : CentOS7php 7.4opcache는 php 엑세스를 가속화하기 위한 것이다….

  • [Linux] 쉘(Shell)과 커널&쉘 스크립트 및 프롬프트

    리눅스에 대해 공부하면서 터미널 창에서 명령어를 입력해서 관리를 하지만 시스템 자체에 대한 공부가 리눅스 서버를 운영하는데 많은 도움이 되기 때문에 기초와 개념에 대해 알아야 할 필요성을 가지게 되었습니다. 리눅스 쉘(Shell)과 쉘 스크립트(Shell Script) 그리고 프롬프트(Prompt)의 기본 개념에 대해 알아 보겠습니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적…

  • 리눅스 디렉토리 구조 및 파일 종류🔝

    리눅스 운영체제는 계층적 파일 시스템을 사용합니다. 위에서 아래 또는 위와 아래로 구성되어 있습니다. 리눅스 디렉토리 구조는 파일 시스템의 시작 지점인 루트 디렉토리(/)부터 시작됩니다. Linux 파일 시스템 계층 구조는 리눅스를 포함한 유닉스 유형 운영 체제의 디렉토리 구조와 내용을 결정하는 일련의 지침인 파일 시스템 계층 구조 표준의 적용을 받습니다. 계층 구조 표준은 리눅스 재단(영어: Linux Foundation)에서…

  • 리눅스 퍼미션(4,2,1)과 소유권 | chmod, chown, umask 명령어 | 스티키 비트

    리눅스 퍼미션(Permission)은 권한(&허가)을 의미합니다. 유닉스 계열 운영 체제들은 MS-DOS 계열의 운영 체제들은 멀티 테스킹 시스템이 아니며 멀티 유저 시스템 역시 아닙니다. 보통 컴퓨터는 하나의 키보드와 모니터를 가지고 한 명이 사용하지만 멀티 유저 시스템인 리눅스는 한 명 이상이 사용할 수 있다는 것을 의미합니다. 유닉스 계열의 멀티 유저 시스템은 운영 체제 설계 초기부터 깊게 내장된…

  • 리눅스 패키지(Linux Packag)란 무엇인가?

    리눅스 패키지(Linux Packag)를 윈도우와 비교하자면, 윈도우의 인스톨러 파일(.msi, .exe)는 소프트웨어를 설치하는 데 사용되며, 리눅스에서는 비슷한 개념으로 패키지 관리자를 이용하여 소프트웨어를 설치합니다. 리눅스 패키지는 실행파일, 라이브러리, 설정 파일 등을 하나의 패키지로 묶어 제공하며, 패키지 관리자를 통해 해당 패키지를 다운로드하고 시스템에 설치합니다. 윈도우의 인스톨러와 유사하게, 리눅스는 패키지 관리자를 통해 사용자가 소프트웨어를 쉽게 설치, 업데이트, 삭제할…

답글 남기기

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

Prove your humanity: 5   +   8   =