서로 다른 버전의 PHP 적용

류정현·2024년 10월 2일

하나의 Apache 에 2개의 서로 다른 버전의 PHP 를 적용하려면 PHP-FPM(FastCGI Process Manager) 을 사용하여 각 사이트별로 다른 PHP-FPM 풀을 구성할 수 있습니다.

1. PHP 버전 설치

서로 다른 PHP 버전들을 설치합니다. 예를 들어, PHP 7.4와 PHP 8.0을 설치합니다.

sudo apt update
sudo apt install php7.4 php7.4-fpm
sudo apt install php8.3 php8.0-fpm

다음의 메세지를 확인 할 수 있습니다.

NOTICE: Not enabling PHP 7.4 FPM by default.
NOTICE: To enable PHP 7.4 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.4-fpm

NOTICE: Not enabling PHP 8.3 FPM by default.
NOTICE: To enable PHP 8.3 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.3-fpm
NOTICE: You are seeing this message because you have apache2 package installed.

따라서 다음 코드를 수행합니다.

a2enmod proxy_fcgi setenvif
a2enconf php7.4-fpm
a2enconf php8.3-fpm

2. PHP-FPM 풀 설정

각 PHP-FPM 버전에 대한 풀 설정 파일을 수정하여 각각 다른 소켓 파일을 사용하도록 설정합니다.

PHP 7.4: /etc/php/7.4/fpm/pool.d/site1.conf

[site1]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm-site1.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

PHP 8.0: /etc/php/8.3/fpm/pool.d/site2.conf

[site2]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm-site2.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

3. PHP-FPM 서비스 재시작

설정 파일을 저장한 후, PHP-FPM 서비스를 재시작합니다.

sudo systemctl restart php7.4-fpm
sudo systemctl restart php8.3-fpm

4. Apache 가상 호스트 설정

Apache 가상 호스트 설정 파일을 수정하여 각 사이트에 대해 다른 PHP-FPM 소켓을 사용하도록 합니다.

사이트 1: /etc/apache2/sites-available/site1.conf

<VirtualHost *:80>
    ServerAdmin webmaster@site1.com
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1

    <Directory /var/www/site1>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php7.4-fpm-site1.sock|fcgi://localhost"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>

사이트 2: /etc/apache2/sites-available/site2.conf

<VirtualHost *:80>
    ServerAdmin webmaster@site2.com
    ServerName site2.com
    ServerAlias www.site2.com
    DocumentRoot /var/www/site2

    <Directory /var/www/site2>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.0-fpm-site2.sock|fcgi://localhost"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/site2_error.log
    CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
</VirtualHost>

5. 사이트 활성화 및 Apache 재시작

사이트를 활성화하고 Apache를 재시작합니다.

sudo a2ensite site1.conf
sudo a2ensite site2.conf
sudo systemctl restart apache2

이 설정을 통해 Apache는 각 사이트에서 서로 다른 PHP 버전을 사용할 수 있게 됩니다. 각각의 Virtual Host가 고유한 PHP-FPM 풀을 사용하여 다른 PHP 버전을 처리합니다.

profile
사용자의 경험을 설계하고 시스템의 생명주기를 책임지는 개발자

0개의 댓글