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

  • SSH 설정 – /etc/ssh/sshd_config 파일 기능 및 설정

    SSH(Secure Shell)은 리눅스 원격 컴퓨터로 접속하기 위해 사용되는 인터넷 프로토콜입니다. 보안 셸이란 이름처럼 기존 텔넷에서 업그레이드 된 보안 접속 시스템입니다. 기본적인 보안 기능 외에도 추가로 SSH 설정을 통해 보안을 강화할 수 있습니다. SSH를 사용하면 암호화된 통신을 통해 데이터의 무단 접근을 방지할 수 있으며, 더 안전한 원격 작업을 수행할 수 있습니다. SSH는 네트워크를 통해…

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

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

  • 리눅스 tmp 디렉토리: /tmp와 /var/tmp 차이

    리눅스 tmp 디렉토리는 임시 파일을 저장하기 위해 주로 /tmp와 /var/tmp 디렉토리를 사용합니다. /tmp는 일시적인 임시 파일을 저장하는 공간으로, 시스템이 재부팅 되면 대부분의 파일이 삭제됩니다. 따라서 빠른 입출력과 임시 작업에 적합하며, 주로 프로세스가 실행 중 생성하는 임시 데이터를 저장합니다. 반면에 /var/tmp는 재부팅 후에도 파일이 유지되는 임시 저장 공간입니다. 장기간 유지가 필요한 임시 파일이나 작업…

  • [Linux] Let’s Encrypt 와일드카드 인증서 설치(Certbot, Feat. Cloudflare)

    그동안 let’s Encrypt 일반 인증서를 Certbot 설치 후 사용하다가 Let’s Encrypt 와일드카드 인증서를 설치해서 사용해야 겠다는 생각을 하게 되었습니다. 현재 서버는 LightSail Alma Linux apache로 구동되는 서버인데 차후 상황을 봐서 Open Lightspeed 서버로 변경을 고려중이지만 한참 뒤가 될 것 같습니다. 현재는 apache 기준으로 Let’s Encrypt 와일드카드 인증서를 설치합니다. 와일드카드 SSL 설치 조건 중 하나가 Certbot의…

  • [우분투] AH00558: apache2: Could not reliably .. server’s fully qualified domain name , using 127.0.1.1. Set

    우분투 서버에서 APM까지 설치 후 서버에서 apache2ctl -t 무결성 및 apache2ctl graceful 명령어 입력 중 server’s fully qualified domain name 오류 메시지를 확인할 수 있습니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적 모드 설정🔲 www.conf 최종 설정(개별 호스팅)🔲 slowlog 설정🔲 Apache 통합하기🔲 소캣 설정🔲 상태 확인 및…

  • 리눅스 커널 버전 확인 명령어 및 배포판 버전 확인 방법

    리눅스를 운영할 때 리눅스 커널 버전 확인과 배포판 버전을 확인해야 하는 경우가 있습니다. 목차✅ PHP-FPM의 기능✅ PHP-FPM 설치✅ PHP-FPM 설정(Apache 설치 서버)🔲 정적 모드 및 동적 모드 설정🔲 www.conf 최종 설정(개별 호스팅)🔲 slowlog 설정🔲 Apache 통합하기🔲 소캣 설정🔲 상태 확인 및 서버 재시작 시 자동 구동 설정✅ 리눅스 커널 버전 확인 명령어 리눅스에서…

답글 남기기

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

Prove your humanity: 6   +   7   =