NGINX PHP-FPM 업데이트 및 여러 버전 동시 연동 방법

튜토리얼 환경 : 우분투 16.04 LTS Xenial / NGINX 패키지 설치판 / PHP 패키지 설치

NGINX를 웹서버로 서비스 하는 경우 워드프레스, 텍스트큐브, Xpress Engine 같은 무료로 배포하는 CMS(Contents Management System)를 구동하기 위해서 PHP를 설치해야 합니다.

아파치 같은 경우, PHP를 사용하기 위한 모듈이 별도로 준비되어 있어 PHP 설치 후 아파치에서 약간의 설정만 하면 아파치 서비스 데몬과 함께 PHP가 같이 구동되는 방식이지만 NGINX 같은 경우에는 아파치와 다르게 구동 모듈이 별도로 존재하지 않기 때문에 PHP를 FastCGI 방식(PHP-FPM)으로 구동해야 합니다.

이전 포스트에서 NGINX와 PHP-FPM을 설치해서 연동하는 것을 알아봤는데 이러한 구조를 응용하면 PHP 버전 업데이트는 물론 각각의 가상 호스트에 PHP 버전별로 구동이 가능합니다.

사용하는 CMS가 특정 PHP 버전을 요구하는 경우, 개발된 솔루션이 업데이트가 안되는 경우 이전 PHP 버전으로 구동하는데 활용할 수 있습니다.

PHP-FPM 버전별 설치

# sudo su
# add-apt-repository ppa:ondrej/php
# apt-get update
# apt-get install php5.6-fpm
# apt-get install php7.1-fpm

우선 원하는 PHP 버전을 찾아 설치합니다. 예시로 PHP5.6 버전과 PHP7.1을 설치해 봤습니다.

원하는 PHP 버전을 설치한 다음 /etc/php 디렉토리를 확인해 보면 하위 디렉토리에 PHP가 버전별로 분류 되어 있습니다.

NGINX 설정 예시

1. abc.com 가상 호스트

server {
     listen 80;
     server_name abc.com;
     location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
     }
}

2. xyz.com 가상 호스트

server {
     listen 80;
     server_name xyz.com;
     location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
     }
}

가상 호스트 설정 구문에서 PHP 확장자를 컨트롤하는 location 구문에서 fastcgi_pass 경로를 원하는 버전의 소켓과 연결합니다.

사이트별로 다른 PHP 버전을 구동하고 싶은 경우 각 가상 호스트 설정의 위와 같이 원하는 버전으로 소켓을 설정하면 되겠습니다.

우분투에서 PHP-FPM을 패키지로 설치한 경우 /var/run/php 에 sock 파일이 모여 있습니다.

PHP 구동 및 세부 설정

PHP-FPM은 프로세스를 띄워 구동되기 때문에 서비스 형태의 데몬으로 등록 됩니다. NGINX에서 PHP를 설정한 다음 PHP가 작동하지 않는다면 데몬이 구동되고 있는지 확인 후, 프로세스가 없다면 서비스를 실행하면 되겠습니다.

앞서 본 스크린샷 처럼 각 PHP 마다 디렉토리가 나뉘어 있기 때문에 php.ini나 php 모듈을 각 버전별로 관리해야 한다는점 유의하세요.

같은 주제의 글

댓글

이메일 주소는 공개되지 않으며 댓글에 하나 이상의 URL이 포함될 경우 관리자 승인 후 공개됩니다.

댓글은 운영 정책에 따라 관리됩니다. (링크)