OS

2022.02.16 15:24

한 서버에 여러 버전의 php 설정

  • 비아웹 오래 전 2022.02.16 15:24 인기
  • 5,010
    0

안녕하세요 서버호스팅 비아웹입니다.

예전의 apache + php 환경에서는 apache 에 so 파일이 추가되어 동작하였습니다만,

최근 php 구동 방식이 FPM(FastCGI Process Manager) 방식으로 동작합니다.

 

apache 서버와 php 서버가 별도의 프로세스로 동작한다는 것은 별도의 서버로 분리도 가능하다는 것이며,

L4 나 소트트웨어 로드발란스를 이용하여 php 서버를 여러대로 구성하는 것이 가능합니다.

 

기존에 WAS 서버라고 하면 tomcat 이나 Jboss 같은 java 서버를 많이 생각하셨는데, 이제 php-fpm 도 WAS 서버가 되었다고 보시면 됩니다.

 

1. 테스트 목적 및 버전

목적 :한 서버에 2가지 버전의 php를 설치하여, 다른 버전의 php 를 사용하기

php 버전 : 7.3.8 / 8.0.3 두가지 설치

OS: CentOS Linux release 7.6.1810(Core) apache 2.4 php 7.3.8FPM php 8.0.3FPM

2. apache 2.4 및 mysql 에 대한 컴파일은 생략합니다.

 

3. php 컴파일

a. 의존성 패키지

yum -y install gcc-c++ gcc autoconf bison libcurl-devel bzip2-devel gd-devel gmp-devel libicu-devel \ libxslt-devel zlib-devel libwebp-devel e2fsprogs-devel krb5-devel libidn-devel ncurses-devel \ gdbm-devel libxml2-devel freetype-devel libpng* libjpeg* gd-devel enchant-devel netpbm* \ libxslt* gmp-devel systemd-devel readline-devel sqlite-devel openldap-devel rpm -Uvh http://www6.atomicorp.com/channels/atomic/centos/7/x86_64/RPMS/oniguruma-5.9.5-3.el7.art.x86_64.rpm rpm -Uvh http://www6.atomicorp.com/channels/atomic/centos/7/x86_64/RPMS/oniguruma-devel-5.9.5-3.el7.art.x86_64.rpm rpm -Uvh http://packages.psychotic.ninja/7/plus/x86_64/RPMS/libzip-0.11.2-6.el7.psychotic.x86_64.rpm rpm -Uvh http://packages.psychotic.ninja/7/plus/x86_64/RPMS/libzip-devel-0.11.2-6.el7.psychotic.x86_64.rpm

b. php 7.3.8 컴파일 옵션

./configure \ --prefix=/usr/local/php7 \ --with-apxs2=/usr/local/apache/bin/apxs \ --with-config-file-path=/usr/local/php7/etc \ --with-config-file-scan-dir=/usr/local/php7/etc \ --with-openssl \ --with-mysql-sock=/tmp/mysql.sock \ --with-mysqli=shared,mysqlnd \ --with-pdo-mysql \ --with-libdir=lib64 \ --with-enchant \ --with-gettext \ --with-gd \ --with-jpeg-dir \ --with-png-dir \ --with-freetype-dir \ --with-zlib \ --with-gmp \ --with-iconv \ --with-gdbm \ --with-pcre-regex \ --with-bz2 \ --with-curl \ --with-mhash \ --with-xsl \ --with-readline \ --with-curl \ --with-pear \ --with-gettext \ --with-xmlrpc \ --with-ldap \ --with-fpm-systemd \ --with-fpm-user=nobody \ --with-fpm-group=nobody \ --enable-mysqlnd \ --enable-bcmath \ --enable-sockets \ --enable-pcntl \ --enable-ftp \ --enable-zip \ --enable-bcmath \ --enable-mbstring \ --enable-calendar \ --enable-simplexml \ --enable-json \ --enable-hash \ --enable-session \ --enable-soap \ --enable-xml \ --enable-wddx \ --enable-opcache \ --enable-intl \ --enable-cli \ --enable-maintainer-zts \ --enable-debug \ --enable-mbregex \ --enable-libxml \ --enable-dba \ --enable-wddx \ --enable-shmop \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --enable-exif \ --enable-fpm

c. php 8.0.3 컴파일 옵션

./configure --prefix=/usr/local/php8 \ --with-apxs2=/usr/local/apache/bin/apxs \ --with-config-file-path=/usr/local/php8/etc \ --with-config-file-scan-dir=/usr/local/php8/etc \ --with-openssl \ --with-mysql-sock=/tmp/mysql.sock \ --with-mysqli \ --with-pdo-mysql \ --with-enchant \ --with-gettext \ --with-freetype \ --with-jpeg \ --with-webp \ --with-xpm \ --with-zlib \ --with-gmp \ --with-iconv \ --with-gdbm \ --with-bz2 \ --with-curl \ --with-mhash \ --with-xsl \ --with-readline \ --with-curl \ --with-pear \ --with-gettext \ --with-ldap \ --with-libxml \ --with-zip \ --with-libdir=lib64 \ --enable-gd \ --enable-litespeed \ --enable-mysqlnd \ --enable-bcmath \ --enable-sockets \ --enable-pcntl \ --enable-ftp \ --enable-bcmath \ --enable-mbstring \ --enable-calendar \ --enable-simplexml \ --enable-session \ --enable-soap \ --enable-xml \ --enable-opcache \ --enable-intl \ --enable-cli \ --enable-zts \ --enable-debug \ --enable-mbregex \ --enable-dba \ --enable-shmop \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --enable-exif \ --enable-fpm

make 와 make install 은 생략합니다.

 

4. php-fpm 설정

a. php7.3 php-fpm.conf

[root@viaweb etc]# vi php-fpm.conf [global] pid =/var/run/php7-fpm.pid error_log =/var/log/php7-fpm.log daemonize = yes include=/usr/local/php7/etc/php-fpm.d/*.conf

b. php7.3 www.conf

[root@viaweb etc]# vi php-fpm.d/www.conf [www] user = nobody group = nobody listen =/var/run/php7-fpm.sock ;listen =127.0.0.1:9073 listen.owner = nobody listen.group = nobody pm = dynamic pm.max_children =50 pm.start_servers =5 pm.min_spare_servers =5 pm.max_spare_servers =10

c. php8 php-fpm.conf

[root@viaweb etc]# cat php-fpm.conf [global] pid =/var/run/php8-fpm.pid error_log =/var/log/php8-fpm.log daemonize = yes include=/usr/local/php8/etc/php-fpm.d/*.conf

d. php8 www.conf

[root@viaweb etc]# vi php-fpm.d/www.conf [www] user = nobody group = nobody listen =/var/run/php8-fpm.sock ;listen =127.0.0.1:9080 listen.owner = nobody listen.group = nobody pm = dynamic pm.max_children =50 pm.start_servers =5 pm.min_spare_servers =5 pm.max_spare_servers =10

서비스 등록 및 구동에 대해서는 https://blog.naver.com/viaweb/222319139055 참조하시면 됩니다.

 

이상의 환경 설정 파일은 unix socket 방식으로 구성되었으며,

tcp 형식으로 사용하시고 자 할 경우 listen 부분 주석 변경하시기 바랍니다. (; 가 주석입니다)

;listen =/var/run/php8-fpm.sock listen =127.0.0.1:9080

cf. 동일한 프로그램을 여러개 설치하실 경우 설치 경로, pid 파일명, tcp 소켓 번호, unix socket 파일, 로그 파일명, 서비스 등록 명을 모두 다르게 설정하셔야 합니다.

 

127.0.0.1:9000 이 php-fpm 기본 사용 포트이나,

이상의 예제에서는 버전 정보 기입을 위해 9073/9080으로 설정 하였습니다.

 

e. 서비스 구동 결과

 

5. apache 설정

proxy 모듈 활성화 및 virtualhost 설정 진행

[root@viaweb php-fpm.d]# vi /usr/local/apache/conf/httpd.conf ## 주석 추가 #LoadModule php7_module modules/libphp7.so #LoadModule php_module modules/libphp.so ## 주석 제거 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
[root@viaweb php-fpm.d]# vi /usr/local/apache/conf/extra/httpd-vhosts.conf <VirtualHost *:80> ServerAdmin webmaster@viaweb.co.kr DocumentRoot "/home/viaweb/viaweb.co.kr" ServerName viaweb.co.kr ServerAlias www.viaweb.co.kr ErrorLog "logs/viaweb.co.kr.com-error_log" CustomLog "logs/viaweb.co.kr-access_log" common <FilesMatch "\.(php*|phtm|phtml|htm|html|inc|php3)$"> SetHandler "proxy:unix:/var/run/php7-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
 
<VirtualHost *:80> ServerAdmin webmaster@viaweb.co.kr DocumentRoot "/home/viaweb/m.viaweb.co.kr" ServerName m.viaweb.co.kr ServerAlias mobile.viaweb.co.kr ErrorLog "logs/m.viaweb.co.kr-error_log" CustomLog "logs/m.viaweb.co.kr-access_log" common <FilesMatch "\.(php*|phtm|phtml|htm|html|inc|php3)$"> SetHandler "proxy:unix:/var/run/php8-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>

이상의 내용은 간략하게 테스트를 위해 설정된 내용이며,

실 서비스에서 사용하실때는 더 많은 설정과 주의가 필요합니다.

 

감사합니다.

서버호스팅 비아웹

  • 공유링크 복사