我有一个安装了 Apache 2.4 的小型 Debian 9 服务器。我需要它来为我的家提供 Nextcloud 服务,这需要 PHP7.0。然后我还需要让它提供相当旧的服务(http://www.refbase.net),需要 PHP5.6。
我不是 Apache 专家,我想要的只是为内部家庭使用提供这两个服务。读了一下,我似乎明白这可以通过使用PHP5-FPM和PHP7.0-FPM服务来实现?我已经安装了:
user@server:/$ sudo systemctl status php5-fpm
[sudo] password of user:
● php5-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php5-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-11-05 22:08:08 GMT; 3 days ago
进而:
user@server:~$ sudo systemctl status php7.0-fpm
● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2019-11-09 16:48:14 GMT; 59min ago
我还安装了这些:
sudo apt install libapache2-mod-fcgid
sudo a2enmod actions fcgid alias proxy_fcgi
因此,我在 /var/www/ 中创建了两个文件夹,分别是 php56 和 php70,以配置两个不同的虚拟主机。
<VirtualHost *:80>
ServerName php56.example.com
DocumentRoot /var/www/php56
<Directory /var/www/php56>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
# Apache 2.4.10+ can proxy to unix socket
SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
进而:
<VirtualHost *:80>
ServerName php72.example.com
DocumentRoot /var/www/php70
<Directory /var/www/php70>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php7.0-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
我在上面创建的相应 www 目录中创建了两个文件:
echo "<?php phpinfo(); ?>" > /var/www/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/php70/index.php
两个虚拟站点都已启用,但当我去测试它们时,它们都显示 PHP 7.0 已启用。当检查 /var/run/php/ 文件夹时,我只能看到 7.0 FPM sock 和 pid 文件。
更新替代方案默认激活PHP7.0。
关于如何同时提供两个 PHP 版本以便我可以运行这两个服务的任何线索?
谢谢