Manjaro系统Apache2站点同时使用PHP的不同版本
# 简介
由于经常需要使用 PHP 的不同版本环境来开发和测试项目,借助 Apache 支持 php-fpm 的模式,可以使得同一个项目同时使用不同 PHP 版本运行。我找了不少相关配置的资料,但是结果都差强人意,经过仔细阅读 Arch 对于 Apache2 的 wiki 文档和不断试错,终于完美让 Apache 同时支持多个 PHP 运行,以下教程是基于 Manjaro/Arch 系统进行配置的。
# PHP 运行模式选择 -- libphp
参考链接:Apache 的状态和日志 - Arch Wiki (opens new window)
根据 Wiki 中的描述,注释和启用相关模块,并且所使用的 PHP 已安装 php-apache
扩展。
修改配置文件 /etc/httpd/conf/httpd.conf
,增加以下内容
# 示例站点,用于测试是否启用了不同 PHP 版本
Include conf/vhosts/laravelblog.com
Include conf/vhosts/zentaopmsdev.com
# 这里使用的是 PHP7.4 版本
# LoadModule php7_module modules/libphp7.so
# AddHandler php7-script php
# Include conf/extra/php7_module.conf
# 启用PHP5.6,如果开启了此处注释,需要注释 PHP7.4 的配置,这种方式只能支持一种 PHP 版本运行
LoadModule php5_module modules/libphp56.so
AddHandler php5-script php
Include conf/extra/php56_module.conf
2
3
4
5
6
7
8
9
10
11
12
13
重启 Apache 服务: systemctl restart httpd.service
。
# PHP 运行模式选择 -- php-fpm [ 推荐 ]
参考链接:Apache 的状态和日志 - Arch Wiki (opens new window)
编辑配置文件:/etc/httpd/conf/httpd.conf
,找到以下模块,去除注释。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
2
PHP7.4 版本和 PHP5.6 版本安装 php-fpm,参考命令:
❯ pacman -S php-fpm
❯ yay -S php56-fpm
2
安装 PHP 对应的 php-fpm 后,运行 php-fpm,可以为其添加开机自启动。参考命令:
❯ systemctl start php-fpm
❯ systemctl start php56-fpm
❯ systemctl enable php-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
❯ systemctl enable php56-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/php56-fpm.service → /usr/lib/systemd/system/php56-fpm.service.
2
3
4
5
6
运行成功后,会自动在 run
目录下创建 php-fpm.sock
文件,存在文件后就可以去给站点配置使用那个版本的 PHP 了。
❯ find php*
php56-fpm
php56-fpm/php-fpm.pid
php56-fpm/php-fpm.sock
php-fpm
php-fpm/php-fpm.sock
2
3
4
5
6
在个人站点配置文件中加入以下配置内容,在运行此站点的时候就会使用配置的 PHP 版本运行程序。
** 核心配置 **
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php56-fpm/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
2
3
站点配置文件参考(使用 PHP5.6):
<VirtualHost *:80>
ServerAdmin leiyong208@gmail.com
DocumentRoot "/srv/http/zentaopms/www"
ServerName www.zentaopmsdev.com
ServerAlias www.zentaopmsdev.com
DirectoryIndex index.html index.htm index.php
ErrorLog "/var/log/httpd/zentaopmsdev..com-error_log"
CustomLog "/var/log/httpd/zentaopmsdev.com-access_log" common
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php56-fpm/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
<Directory "/srv/http/zentaopms/www">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
站点配置文件参考(使用 PHP7.4):
<VirtualHost *:80>
ServerAdmin leiyong208@gmail.com
DocumentRoot "/srv/http/laravelblog/public"
ServerName www.laravelblog.com
ServerAlias www.laravelblog.com
DirectoryIndex index.html index.htm index.php
ErrorLog "/var/log/httpd/laravelblog.com-error_log"
CustomLog "/var/log/httpd/laravelblog.com-access_log" common
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
<Directory "/srv/http/laravelblog/public">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
重启 Apache 服务: systemctl restart httpd.service
。