안녕하세요.
쉽게 시작하는 비즈니스 토탈 IT, 아이티이지(ITEASY) 입니다.

오늘 기술 블로그에서는 PHP-FPM 소개 및 설치 방법에 대해서 살펴보겠습니다.
우선, PHP-FPM이란 무엇인지 알려드릴게요!

🔎 PHP-FPM이란?

PHP-FPM은 PHP FastCGI Process Manager의 약자로, FastCGI 프로토콜을 사용하여 PHP 스크립트를 효율적으로 처리하는 프로세스 관리자입니다. 웹 서버와 독립적으로 동작하여 성능과 확장성을 높입니다.

그렇다면, 왜 PHP-FPM을 사용하는 걸까요? 이유는 다음과 같습니다.

▶ 더 나은 성능 : 동시 요청을 효율적으로 처리
▶ 독립 관리 : 웹 서버와 별도로 관리 가능
▶ 확장성 : 프로세스 추가로 수평 확장 가능
▶ 보안 : 별도 프로세스로 실행하여 보안 강화

🔎 PHP-FPM 설치방법?

  • Ubuntu : sudo apt install php7.4-fpm로 설치 후 sudo systemctl start php7.4-fpm으로 시작
  • Windows : PHP 공식 사이트(php.net)에서 다운로드 후 php-fpm.exe로 실행
  • macOS : Homebrew로 brew install php@7.4 설치 후 brew services start php@7.4로 시작

💡 PHP-FPM 매뉴얼 상세

1️⃣ 소개
1-1. PHP-FPM의 역할
PHP-FPM는 전통적인 mod_php 방식과 달리 PHP를 웹 서버와 별도로 실행하여 성능과 확장성을 개선합니다. PHP-FPM의 주요 역할은 다음과 같습니다.

  • PHP 프로세스 관리 및 요청 처리
  • 웹 서버와 FastCGI로 통신하여 성능 최적화
  • 동시 요청을 효율적으로 처리하기 위한 프로세스 풀 관리

1-2. PHP-FPM의 중요성과 사용 사례
PHP-FPM은 특히 고부하 환경에서 유용하며, 웹 애플리케이션의 성능을 향상 시키는데 필수적입니다. 사용 사례는 다음과 같습니다.

  • 대규모 트래픽을 처리하는 웹사이트
  • 여러 애플리케이션을 서로 다른 PHP 버전으로 실행해야 하는 경우
  • 보안과 성능을 동시에 고려한 환경

2️⃣ 설치
PHP-FPM은 다양한 운영 체제에서 설치 가능하며, 아래는 Linux, Windows, macOS에 대한 상세 지침입니다. 아래의 내용을 참고해 주세요.
2-1. Ubuntu에 설치
Ubuntu 20.04 이상에서 PHP-FPM을 설치하는 방법은 다음과 같습니다.
1. 패키지 목록 업데이트

sudo apt update

2. 원하는 PHP 버전의 FPM 패키지 설치 (예: PHP 7.4)

sudo apt install php7.4-fpm

3. 서비스 시작

sudo systemctl start php7.4-fpm

4. 부팅 시 자동 시작 설정

sudo systemctl enable php7.4-fpm

5. 설치 확인

php-fpm -v

➡ 참고 : php -v로 PHP 버전 확인 가능, FPM 설치 여부는 서비스 상태로 확인
(sudo systemctl status php7.4-fpm)

2-2. Windows에 설치
Windows에서는 PHP-FPM을 공식 PHP 배포판에서 제공하며, 수동 설정이 필요합니다.
1. 공식 PHP 웹사이트(php.net)에서 Windows용 PHP 다운로드
2. 다운로드한 ZIP 파일을 디렉토리(예: C:\PHP)에 압축 해제
3. php.ini 파일을 필요에 따라 구성 (예: FPM 설정 활성화)
4. PHP-FPM 실행

C:\PHP\php-fpm.exe

5. 서비스로 실행하려면 NSSM(nssm.cc)과 같은 도구 사용
Windows에서의 사용은 Linux에 비해 덜 일반적이므로, 공식 문서(PHP Windows Installation) 참고 권장

2-3. macOS에 설치
macOS에서는 Homebrew를 통해 설치 가능
1. Homebrew 설치 확인 또는 설치
2. 원하는 PHP 버전의 FPM 설치 (예: PHP 7.4)

brew install php@7.4

3. 서비스 시작

brew services start php@7.4

4. PHP-FPM 실행

echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.zshrc  
source ~/.zshrc

3️⃣ 구성
PHP-FPM의 주요 구성 파일은 일반적으로 /etc/php/7.4/fpm/php-fpm.conf 에 위치하며, 풀(pool)별 설정은 /etc/php/7.4/fpm/pool.d/www.conf 에 있습니다.
3-1. 중요한 설정

  • listen : PHP-FPM이 수신 대기하는 IP 주소와 포트 (예: 127.0.0.1:9000)
  • pm : 프로세스 관리자 유형 (예: dynamic, ondemand, static)
  • pm.max_children : 최대 자식 프로세스 수
  • user 및 group : PHP 프로세스가 실행되는 사용자 및 그룹
  • chdir : 프로세스 시작 시 변경할 디렉토리
  • access.log, error.log : 로그 파일 경로

3-2. 예제 구성
아래는 기본적인 “www.conf” 설정 예제

[www]  
listen = 127.0.0.1:9000  
listen.allowed_clients = 127.0.0.1  
user = www-data  
group = www-data  
pm = dynamic  
pm.max_children = 5  
pm.start_servers = 2  
pm.min_spare_servers = 1  
pm.max_spare_servers = 3  
chdir = /

설명 :

  • listen : TCP 포트 9000에서 수신 대기
  • pm = dynamic : 동적 프로세스 관리, 필요 시 프로세스 생성
  • pm.max_children : 최대 5개의 프로세스 허용

4️⃣ 운영
4-1. 서비스 관리(Linux)
Linux에서는 systemd 서비스로 관리
1. 시작

sudo systemctl start php7.4-fpm

2. 중지

sudo systemctl stop php7.4-fpm

3. 재시작

sudo systemctl restart php7.4-fpm

4. 상태 확인

sudo systemctl status php7.4-fpm

5. 구성 재로딩

sudo systemctl reload php7.4-fpm

4-2. macOS에서의 관리
Homebrew를 사용한 경우
1. 시작

brew services start php@7.4

2. 중지

brew services stop php@7.4

3. 재시작

brew services restart php@7.4

➡ Windows에서는 명령줄 또는 서비스 관리 도구로 관리

5️⃣ 웹 서버와의 통합
PHP-FPM은 FastCGI 프로토콜을 지원하는 웹 서버(Apache, NGINX, LiteSpeed 등)와 통합 가능합니다.
5-1. Apache와 통합
1. mod_proxy_fcgi 모듈 설치

sudo apt install libapache2-mod-fastcgi

2. Apache 가상 호스트 구성에 추가

<FilesMatch \.php$>  
    SetHandler "proxy:fcgi://127.0.0.1:9000"  
</FilesMatch>

5-2. NGINX와 통합
NGINX 구성 파일에 PHP 요청 처리 추가

location ~ \.php$ {  
    include fastcgi_params;  
    fastcgi_pass 127.0.0.1:9000;  
    fastcgi_index index.php;  
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
}  

6️⃣ 테스트
PH-FPM 작동 확인 방법
1. 간단한 PHP 파일 생성 (index.php)

<?php  
echo "PHP-FPM is working!";  

2. 웹 서버를 통해 파일 접근, 정상 출력 확인

echo "<?php echo 'Hello, World!';" | nc 127.0.0.1 9000

➡ 출력 : “Hello, World!”로 정상 작동 확인

7️⃣ 문제 해결

문제원인해결 방법
PHP-FPM 시작 실패구성 파일 오류 또는 권한 문제오류 로그 확인, 사용자/그룹 존재 확인
웹 서버 연결 실패소켓/포트 설정 오류PHP-FPM 소켓/포트 확인, 웹 서버 구성 점검
PHP 스크립트 실행 실패파일 접근 권한 문제PHP-FPM 사용자 읽기 권한 확인, 루트 설정 점검
성능 문제프로세스 설정 부적절pm 설정 조정, 서버 자원 점검

8️⃣ 사용 사례
1. 비루트 사용자 실행 : user와 group을 www-data와 같이 비루트 사용자 설정
2. 소켓 접근 제한 : listen.allowed_clients로 웹 서버만 연결 허용
3. 로그 모니터링 : 정기적으로 접근 및 오류 로그 확인
4. 프로세스 최적화 : pm.max_children 등 설정으로 부하에 맞게 조정
5. Opcode 캐싱 사용 : php.ini에서 OPCache 활성화

opcache.enable=1  
opcache.memory_consumption=128  
opcache.interned_strings_buffer=8  
opcache.max_accelerated_files=4000  

9️⃣ 추가 정보
9-1. 다중 풀 설정
PHP-FPM은 여러 풀을 설정하여 서로 다른 애플리케이션에 대해 다른 PHP 버전이나 설정을 사용할 수 있습니다. (아래 예시 참고)

[pool1] 
listen = /var/run/php-fpm/pool1.socket  
user = user1  
group = group1  
pm = dynamic  
pm.max_children = 5  

➡ 웹 서버는 해당 소켓으로 연결 설정

오늘의 기술 컨텐츠가 도움이 되셨다면, 좋아요👍 버튼을 눌러주세요!
다음에도 알차고 유익한 내용으로 찾아오겠습니다.

현재 아이티이지에서는 다양한 이벤트를 진행하고 있습니다.
궁금하신 분들은 아래의 링크를 클릭하여 확인해 주세요😊👇

감사합니다.
IT is easy, ITEASY!


💌 함께보면 좋은 컨텐츠

🔗 아래의 링크를 클릭 시 상세 페이지로 이동합니다.

댓글 남기기