PHP 설정 · 5 min read · Nov 03, 2025

ISPConfig 3와 함께 여러 PHP 버전 사용하기 (PHP-FPM & FastCGI) (Ubuntu 12.04 LTS)

ISPConfig 3와 함께 여러 PHP 버전 사용하기 (PHP-FPM & FastCGI) (Ubuntu 12.04 LTS)

버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요

ISPConfig 3.0.5부터 하나의 서버에서 여러 PHP 버전을 사용할 수 있으며 웹사이트에 최적의 PHP 버전을 선택할 수 있습니다. 이 기능은 PHP-FPM(5.3부터 시작) 및 FastCGI(모든 PHP 5.x 버전)와 함께 작동합니다. 이 튜토리얼에서는 Ubuntu 12.04 서버에서 PHP 5.3 및 PHP 5.4를 PHP-FPM 및 FastCGI 버전으로 빌드하는 방법을 보여줍니다. 이러한 PHP 버전은 ISPConfig에서 기본 PHP(apt를 통해 설치됨)와 함께 사용할 수 있습니다.

이것이 당신에게 작동할 것이라는 보장은 하지 않습니다!

1. 사전 참고

저는 이 글을 작성할 당시 최신 PHP 5.3 및 5.4 버전인 PHP 5.3.22 및 PHP 5.4.12를 설치할 것입니다. 또한 APC, memcache, memcached 및 ioncube와 같은 추가 PHP 확장을 빌드하는 방법도 보여드리겠습니다.

PHP-FPM은 Apache 및 nginx 서버 모두에서 사용할 수 있지만 FastCGI는 Apache 서버에서만 사용할 수 있습니다.

PHP 5.3 및 5.4에서 PHP-FPM과 FastCGI는 상호 배타적이므로, PHP-FPM용과 FastCGI용으로 각각 PHP를 빌드하는 두 가지 방법을 보여드립니다. 그러나 –enable-fpm으로 한 번, –enable-cgi로 한 번 PHP를 두 번 컴파일할 수 있습니다(서로 다른 기본 디렉토리 사용, 예: PHP-FPM의 경우 /opt/php-5.3.22 및 FastCGI의 경우 /opt/phpfcgi-5.3.22).

2. PHP 5.3.22 빌드하기 (PHP-FPM)

PHP 5.3.22를 다운로드하고 추출합니다:

mkdir /opt/php-5.3.22  
mkdir /usr/local/src/php5-build  
cd /usr/local/src/php5-build  
wget http://de.php.net/get/php-5.3.22.tar.bz2/from/this/mirror -O php-5.3.22.tar.bz2  
tar jxf php-5.3.22.tar.bz2
cd php-5.3.22/

PHP5 빌드를 위한 필수 패키지를 설치합니다:

apt-get install build-essential 
apt-get build-dep php5
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

(마지막 명령은 –with-imap으로 PHP를 빌드할 경우 필요합니다. 그렇지 않으면 ./configure가 다음 오류로 중단됩니다:

checking for crypt in -lcrypt… yes
configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
root@server1:/usr/local/src/php5-build/php-5.3.22# )

다음과 같이 PHP 5.3.22를 구성하고 빌드합니다(./configure 명령을 필요에 맞게 조정할 수 있으며, 사용 가능한 모든 옵션을 보려면

./configure --help

를 참조하세요; 다른 ./configure 명령을 사용하는 경우 추가 라이브러리가 필요하거나 빌드 프로세스가 실패할 수 있습니다):

./configure \  
--prefix=/opt/php-5.3.22 \  
--with-pdo-pgsql \  
--with-zlib-dir \  
--with-freetype-dir \  
--enable-mbstring \  
--with-libxml-dir=/usr \  
--enable-soap \  
--enable-calendar \  
--with-curl \  
--with-mcrypt \  
--with-zlib \  
--with-gd \  
--with-pgsql \  
--disable-rpath \  
--enable-inline-optimization \  
--with-bz2 \  
--with-zlib \  
--enable-sockets \  
--enable-sysvsem \  
--enable-sysvshm \  
--enable-pcntl \  
--enable-mbregex \  
--with-mhash \  
--enable-zip \  
--with-pcre-regex \  
--with-mysql \  
--with-pdo-mysql \  
--with-mysqli \  
--with-jpeg-dir=/usr \  
--with-png-dir=/usr \  
--enable-gd-native-ttf \  
--with-openssl \  
--with-fpm-user=www-data \  
--with-fpm-group=www-data \  
--with-libdir=/lib/x86_64-linux-gnu \  
--enable-ftp \  
--with-imap \  
--with-imap-ssl \  
--with-kerberos \  
--with-gettext \  
--enable-fpm

마지막 스위치(–enable-fpm)는 이 PHP 버전이 PHP-FPM과 함께 작동하도록 보장합니다.

make  
make install

php.ini 및 php-fpm.conf를 올바른 위치로 복사합니다:

cp /usr/local/src/php5-build/php-5.3.22/php.ini-production /opt/php-5.3.22/lib/php.ini
cp /opt/php-5.3.22/etc/php-fpm.conf.default /opt/php-5.3.22/etc/php-fpm.conf

/opt/php-5.3.22/etc/php-fpm.conf를 열고 다음 설정을 조정합니다 - listen 줄에서 사용하지 않는 포트를 사용해야 합니다(예: 8999; 포트 9000은 Ubuntu의 기본 PHP-FPM에서 이미 사용 중일 수 있음) 및 마지막에 include=/opt/php-5.3.22/etc/pool.d/*.conf 줄을 추가해야 합니다:

vi /opt/php-5.3.22/etc/php-fpm.conf

| [...] pid = run/php-fpm.pid [...] user = www-data group = www-data [...] listen = 127.0.0.1:8999 [...] include=/opt/php-5.3.22/etc/pool.d/*.conf |

PHP-FPM을 위한 풀 디렉토리를 생성합니다:

mkdir /opt/php-5.3.22/etc/pool.d

다음으로 PHP-FPM을 위한 init 스크립트를 생성합니다:

vi /etc/init.d/php-5.3.22-fpm

| #! /bin/sh ### BEGIN INIT INFO # Provides: php-5.3.22-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-5.3.22-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO php_fpm_BIN=/opt/php-5.3.22/sbin/php-fpm php_fpm_CONF=/opt/php-5.3.22/etc/php-fpm.conf php_fpm_PID=/opt/php-5.3.22/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ] ; then try='' break fi ;; 'removed') if [ ! -f "$2" ] ; then try='' break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-exit" exit 1 else echo " done" echo " done" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload}" exit 1 ;; esac |

init 스크립트를 실행 가능하게 만들고 시스템 시작 링크를 생성합니다:

chmod 755 /etc/init.d/php-5.3.22-fpm  
update-rc.d php-5.3.22-fpm defaults

마지막으로 PHP-FPM을 시작합니다:

/etc/init.d/php-5.3.22-fpm start

/opt/php-5.3.22/etc/pool.d에 풀이 없으면 무시할 수 있는 경고가 표시됩니다:

root@server1:/usr/local/src/php5-build/php-5.3.22# /etc/init.d/php-5.3.22-fpm start
Starting php-fpm [04-Mar-2013 14:58:41] WARNING: Nothing matches the include pattern ‘/opt/php-5.3.22/etc/pool.d/*.conf’ from /opt/php-5.3.22/etc/php-fpm.conf at line 512.
done
root@server1:/usr/local/src/php5-build/php-5.3.22#

그게 전부입니다 - 원하신다면 APC, memcache, memcached 및 ioncube와 같은 추가 모듈을 설치할 수 있습니다.

APC, memcache 및 memcached 모듈은 PEAR를 통해 설치할 수 있으며, 먼저 설치하고 초기화해야 합니다:

apt-get -y install php-pear
cd /opt/php-5.3.22/etc
pecl -C ./pear.conf update-channels

이제 APC를 다음과 같이 설치할 수 있습니다:

pecl -C ./pear.conf install apc

모든 기본값을 수락합니다. 이후 /opt/php-5.3.22/lib/php.ini를 열어…

vi /opt/php-5.3.22/lib/php.ini

… 파일의 끝에 extension=apc.so 줄을 추가합니다(추가 APC 설정을 구성할 수도 있습니다):

| [...] extension=apc.so apc.enabled=1 apc.shm_size=128M apc.ttl=0 apc.user_ttl=600 apc.gc_ttl=600 apc.enable_cli=1 apc.mmap_file_mask=/tmp/apc.XXXXXX ;apc.mmap_file_mask=/dev/zero ;apc.shm_segments = 5 |

memcache 확장은 다음과 같이 설치할 수 있습니다:

pecl -C ./pear.conf install memcache   

/opt/php-5.3.22/lib/php.ini를 열어…

vi /opt/php-5.3.22/lib/php.ini

… 파일의 끝에 extension=memcache.so 줄을 추가합니다:

| [...] extension=memcache.so |

memcached 확장은 다음과 같이 설치할 수 있습니다:

apt-get install libmemcached-dev
ln -s /usr/include/libmemcached /usr/include/libmemcached-1.0
pecl -C ./pear.conf install memcached

/opt/php-5.3.22/lib/php.ini를 열어…

vi /opt/php-5.3.22/lib/php.ini

… 파일의 끝에 extension=memcached.so 줄을 추가합니다:

| [...] extension=memcached.so |

ionCube Loader는 다음과 같이 설치할 수 있습니다:

cd /tmp

다음으로 아키텍처(x86_64 또는 x86)에 맞는 ionCube Loader 패키지를 다운로드하고 압축을 풉니다:

x86_64의 경우:

wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz  
tar xfvz ioncube_loaders_lin_x86-64.tar.gz

x86의 경우:

wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz  
tar xfvz ioncube_loaders_lin_x86.tar.gz

다음과 같이 진행합니다:

cp ioncube/ioncube_loader_lin_5.3.so /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.so  
vi /opt/php-5.3.22/lib/php.ini

파일의 시작 부분([PHP] 줄 이전)에 zend_extension = /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.so 줄을 추가합니다:

| zend_extension = /opt/php-5.3.22/lib/php/extensions/no-debug-non-zts-20090626/ioncube.so [PHP] [...] |

이후 PHP-FPM을 다시 로드합니다:

/etc/init.d/php-5.3.22-fpm reload

ISPConfig 3.0.5에서는 시스템 > 추가 PHP 버전에서 새 PHP 버전을 구성할 수 있습니다. 이름 탭에서 PHP 버전의 이름(예: PHP 5.3.22)을 입력하면 이 PHP 버전이 ISPConfig의 웹사이트 설정에서 이 이름으로 나열됩니다:

PHP-FPM 설정 탭으로 이동하고(빠른 CGI 설정 탭은 비워둘 수 있음) 다음과 같이 필드를 채웁니다:

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.