하나의 Apache 에 2개의 서로 다른 버전의 PHP 를 적용하려면 PHP-FPM(FastCGI Process Manager) 을 사용하여 각 사이트별로 다른 PHP-FPM 풀을 구성할 수 있습니다.
서로 다른 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
각 PHP-FPM 버전에 대한 풀 설정 파일을 수정하여 각각 다른 소켓 파일을 사용하도록 설정합니다.
/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
/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
설정 파일을 저장한 후, PHP-FPM 서비스를 재시작합니다.
sudo systemctl restart php7.4-fpm
sudo systemctl restart php8.3-fpm
Apache 가상 호스트 설정 파일을 수정하여 각 사이트에 대해 다른 PHP-FPM 소켓을 사용하도록 합니다.
/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>
/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>
사이트를 활성화하고 Apache를 재시작합니다.
sudo a2ensite site1.conf
sudo a2ensite site2.conf
sudo systemctl restart apache2
이 설정을 통해 Apache는 각 사이트에서 서로 다른 PHP 버전을 사용할 수 있게 됩니다. 각각의 Virtual Host가 고유한 PHP-FPM 풀을 사용하여 다른 PHP 버전을 처리합니다.