한 서버에 여러 버전의 php 설치 – PHP-FPM 이용

| 2018년 9월 30일 | 0 Comments

1. 개요
-한 서버에서 여러 버전의 php가 필요할 경우 php-fpm을 이용하여 동시에 사용할 수 있습니다.
-docker를 사용해서 처리해도 무방하지만, docker 환경을 구축하기 어려운 환경일 경우 시도해볼만한 방법입니다.
-CentOS 7.5에서 테스트를 진행하였습니다.
-여기에서는 php 5.6, php 7.0, php 7.1, php 7.2 버전을 하나의 서버에 컴파일하여 사용한다고 가정하였습니다.
-php.ini의 경우 공유가 되지 않으므로 각 버전마다 설정을 해주셔야 합니다.
-npm 환경을 구성해본적이 있다면 해당 내용을 이해하는데는 무리가 없을 것으로 보입니다.

 

2. php 컴파일 설치
-하이라이트로 되어 있는 부분을 제외한 나머지 부분은 원하는대로 지정하셔도 무방합니다.
-버전마다 다르게 지정하셔야 하며, 빨간색 부분을 버전에 맞게 수정하셔야 합니다.(php56, php70, php71, php72)
-libphp 모듈을 사용할 경우 하나의 php 버전에서만 –with-apxs2 옵션을 주시기 바라며, 나머지 버전은 php-fpm으로 처리하시기 바랍니다.
-아래는 5.6 설치 예시입니다. 다른 버전도 동일하게 진행해주시면 됩니다.

./configure –prefix=/usr/local/php56 –with-config-file-path=/usr/local/php56/etc –enable-fpm –enable-sigchild –with-libxml-dir –with-openssl –with-zlib –with-mysqli –with-zlib-dir –with-bz2 –enable-calendar –with-curl –enable-dba –with-gdbm –enable-exif –enable-ftp –with-gd –with-jpeg-dir –with-png-dir –with-freetype-dir –enable-gd-native-ttf –with-gettext –with-imap –with-imap-ssl –with-kerberos –enable-mbstring –with-mhash –with-mcrypt –enable-sockets –enable-sysvmsg –enable-sysvsem –enable-sysvshm –enable-wddx –enable-opcache –enable-zip –with-pdo-mysql –with-snmp –enable-intl

make
make install

 

3. php 설치 마무리
-버전마다 경로를 다르게 지정하셔야 하며, 빨간색 부분을 버전에 맞게 수정하셔야 합니다.
(php56, php70, php71, php72)

cd /usr/local/src/소스경로

cp -arp php.ini-production /usr/local/php56/etc/php.ini
cp -arp /usr/local/php56/etc/php-fpm.conf.default /usr/local/php56/etc/php-fpm.conf

cp -arp sapi/fpm/init.d.php-fpm /etc/init.d/php56-fpm
chmod 700 /etc/init.d/php56-fpm
chkconfig –add php56-fpm
chkconfig php56-fpm on

 

4. php-fpm pool 설정
-pool의 이름은 기본값인 www를 사용하겠습니다.
-5.6 버전의 경우 /usr/local/php/etc/php-fpm.conf 파일 자체를 수정합니다.
-포트의 경우 5.6은 9000, 7.0은 9001, 7.1은 9002, 7.2는 9003으로 지정하였습니다.

<5.6 – 164라인>
vi /usr/local/php56/etc/php-fpm.conf
—————————————
listen = 127.0.0.1:9000
—————————————

<7.0>
cp -arp /usr/local/php70/etc/php-fpm.d/www.conf.default /usr/local/php70/etc/php-fpm.d/www.conf
vi /usr/local/php70/etc/php-fpm.d/www.conf
—————————————
listen = 127.0.0.1:9001
—————————————

<7.1>
cp -arp /usr/local/php71/etc/php-fpm.d/www.conf.default /usr/local/php71/etc/php-fpm.d/www.conf
vi /usr/local/php71/etc/php-fpm.d/www.conf
—————————————
listen = 127.0.0.1:9002
—————————————

<7.2>
cp -arp /usr/local/php72/etc/php-fpm.d/www.conf.default /usr/local/php72/etc/php-fpm.d/www.conf
vi /usr/local/php72/etc/php-fpm.d/www.conf
—————————————
listen = 127.0.0.1:9003
—————————————

 

5. php-fpm 구동

service php56-fpm start
service php70-fpm start
service php71-fpm start
service php72-fpm start

# netstat -nlpt | grep php
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3214/php-fpm: maste
tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 910/php-fpm: master
tcp 0 0 127.0.0.1:9002 0.0.0.0:* LISTEN 911/php-fpm: master
tcp 0 0 127.0.0.1:9003 0.0.0.0:* LISTEN 912/php-fpm: master

 

6. 가상호스트 설정
1) 아파치 가상호스트 설정 예시
-proxy_module, proxy_fcgi_module 모듈이 활성화되어 있어야 합니다.
-사용할 php 버전으로 포트 지정(빨간색)
-홈 소스가 존재하는 위치 지정(파란색)

<VirtualHost *:80>
ServerAdmin ioniere@smileserv.com
DocumentRoot “/home/ioniere/www/apache56.test
ServerName apache56.test
<IfModule proxy_fcgi_module>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/ioniere/www/apache56.test/$1
</IfModule>
ErrorLog “apache56.test-error_log”
CustomLog “apache56.test-access_log” common
</VirtualHost>

 

2) 엔진엑스 가상호스트 설정 예시
-사용할 php 버전 지정(빨간색)
-홈 소스가 존재하는 위치 지정(파란색)

server {
listen 80;
server_name nginx56.test;

location / {
root /home/ioniere/www/nginx56.test;
index index.php index.html index.htm;
}

location ~ \.php$ {
root /home/ioniere/www/nginx56.test;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

 

7. 동작 확인
동일한 서버에서 테스트 진행하였으며, 도메인마다 다른 php 버전을 사용하는 것을 확인할 수 있습니다.

 

 

 

Category: LINUX

김영훈

About the Author ()