LAMP 服务器上的多个 php-fpm 版本

Multiple php-fpm versions on LAMP Server

(在教程和之后在 Thomas Christlieb 的帮助下)

现在使用的配置如下:

System runs on an "old" HP EliteBook, 
which should run as test server before going live + backup server
SystemOS : Linux Mint 18.3 (based on Ubuntu 16.04)
Access to Site via Windows PC in same Network

要安装 LAMP 服务器 + fpm 模块,我遵循以下步骤:

  1. sudo apt-get install apache2 apache2-utils mysql-server phpmyadmin
  2. sudo a2dismod php7.2 (which was installed with phpmyadmin)
  3. sudo add-apt-repository ppa:ondrej/php
  4. sudo apt-get update && sudo apt-get upgrade
  5. sudo apt-get install libapache2-mod-fastcgi libapache2-mod-fcgid
  6. sudo apt-get install php5.6-fpm php5.6 php5.6-mcrypt php5.6-mbstring php5.6-mysql php5.6-zip php5.6-gd php5.6-xml
  7. sudo apt-get install php7.0-fpm php7.0 php7.0-mcrypt php7.0-mbstring php7.0-mysql php7.0-zip php7.0-gd php7.0-xml
  8. sudo a2enmod actions
  9. sudo a2enmod fastcgi
  10. sudo a2enmod fcgid
  11. sudo a2enmod rewrite
  12. sudo a2enmod suexec
  13. sudo a2enmod include(a2enmod 只是为了检查它们是否已经启用)
  14. sudo service apache2 restart(重新启动服务器以便正确加载所有内容)
  15. /etc/apache2/sites-available 中创建了 2 个文件,一个 php56.conf,一个 php70.conf
  16. /var/www/html 中创建了 2 个目录,一个 PHP 5.6,一个 PHP 7.0
  17. sudo a2dissite 000-default(禁用默认站点)
  18. sudo a2ensite php56 php70(启用 PHP 5.6 和 PHP 7.0 站点)
  19. sudo service apache2 restart
  20. /etc/apache2/sites-available/php56.conf :

    <IfModule mod_fastcgi.c>
    
        AddHandler php56-fcgi-www .php
        Action php56-fcgi-www /php56-fcgi-www
    
        Alias /php56-fcgi-www /usr/lib/cgi-bin/php56-fcgi-www
    
        FastCgiExternalServer /usr/lib/cgi-bin/php56-fcgi-www -socket /run/php/php5.6-fpm.sock -pass-header Authorization
    
        <Directory "usr/lib/cgi-bin">
            Require all granted
        </Directory>
    
    </IfModule>
    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName php56
        DocumentRoot /var/www/html/php56
        <Directory "/var/www/html/php56">
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            SetHandler php56-fcgi-www
        </Directory>
        ErrorLog $(APACHE_LOG_DIR)/error.log
        CustomLog $(APACHE_LOG_DIR)/access.log combined
    </VirtualHost>
    
  21. /etc/apache2/sites-available/php70.conf :

    <IfModule mod_fastcgi.c>
    
        AddHandler php70-fcgi-www .php
        Action php70-fcgi-www /php70-fcgi-www
    
        Alias /php70-fcgi-www /usr/lib/cgi-bin/php70-fcgi-www
    
        FastCgiExternalServer /usr/lib/cgi-bin/php70-fcgi-www -socket /run/php/php7.0-fpm.sock -pass-header Authorization
    
        <Directory "usr/lib/cgi-bin">
            Require all granted
        </Directory>
    
    </IfModule>
    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName php70
        DocumentRoot /var/www/html/php70
        <Directory "/var/www/html/php70">
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            SetHandler php70-fcgi-www
        </Directory>
        ErrorLog $(APACHE_LOG_DIR)/error.log
        CustomLog $(APACHE_LOG_DIR)/access.log combined
    </VirtualHost>
    
  22. 在 PHP 5.6 和 PHP 7.0 目录中我创建了一个文件 info.php

    <?php phpinfo() ?>
    
  23. sudo service apache2 restart(重新加载更改的配置)


所以现在 LAMP 服务器安装了 php5.6-fpm & php7.0-fpm 但现在我的第一个问题出现了。

当我在 Web 浏览器中打开 PHP 7.0 站点时,它显示了正确的 phpinfo(),它告诉我:

PHP Version 7.0.27-1 + ubuntu16.04.1 + deb.sury.org + 1 Server API FPM/FastCGI Loaded Configuration File /etc/php/7.0/fpm/php.ini ...


但是当我在网络浏览器中打开 PHP 5.6 站点时,它向我显示了完全相同的 phpinfo() 输出。 所以我尝试禁用 PHP 7.0 站点以检查我的 PHP 5.6 配置是否已损坏。

sudo a2dissite php70
sudo service apache2 reload

现在,当我打开 PHP 5.6(与 PHP 7.0 相同)时,它会显示 PHP 版本 5.6 的 phpinfo,如下所示:

PHP Version 5.6.33-3 + ubuntu16.04.1 + deb.sury.org + 1 Server API FPM/FastCGI Loaded Configuration File /etc/php/5.6/fpm/php.ini ...


从那时起,我向 Thomas Christlieb 寻求帮助,根据他的指示,我做了以下工作:

  1. a2dissite php56 php70(禁用两个站点配置文件)
  2. a2ensite 000-default(再次启用默认配置文件)
  3. 对“/etc/apache2/sites-available/000-default.conf”进行了以下修改

    <IfModule mod_fastcgi.c>
        AddHandler php56-fcgi-www .php
        Action php56-fcgi-www /php56-fcgi-www
        Alias /php56-fcgi-www /usr/lib/cgi-bin/php56-fcgi-www
        FastCgiExternalServer /usr/lib/cgi-bin/php56-fcgi-www -socket /run/php5.6-fpm.sock -pass-header Authorization
        <Directory "/usr/lib/cgi-bin">
            Require all granted
    
        </Directory>
        AddHandler php70-fcgi-www .php
    
        Action php70-fcgi-www /php70-fcgi-www
        Alias /php70-fcgi-www /usr/lib/cgi-bin/php70-fcgi-www
        FastCgiExternalServer /usr/lib/cgi-bin/php70-fcgi-www -socket /run/php7.0-fpm.sock -pass-header Authorization
        <Directory "/usr/lib/cgi-bin">
            Require all granted
    
        </Directory>
    
    </IfModule>
    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        <Directory "/var/www/html/php70">
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            SetHandler php70-fcgi-www
        </Directory>
        <Directory "/var/www/html/php56">
    
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            SetHandler php56-fcgi-www
        </Directory>
    
    </VirtualHost>
    
  4. sudo service apache2 restart(重新加载新配置)

所以现在当我打开这两个站点时,我得到完全相同的错误消息 'Internal Server Error',但这两条消息的字体不同, 我想这可能意味着它应该像这样工作,因为否则它们应该完全相同,或者我错了?

我在谷歌上搜索了很多,也在这里查看过,但是这个问题并不存在,因为我在配置中既没有使用 docker 也没有使用 Nginx。 也许有人已经遇到过这样的问题,可以告诉我如何解决我遗漏的最后一步。


Access.log 信息


...
100.100.100.11 - - [20/Feb/2018:08:26:14 +0100] "GET /php56/info.php HTTP/1.1" 500 805 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0"
100.100.100.11 - - [20/Feb/2018:08:37:35 +0100] "GET /php56/info.php HTTP/1.1" 500 805 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0"
...

Error.log 信息


...
[Tue Feb 20 09:30:08.166199 2018] [fastcgi:error] [pid 27475] (2)No such file or directory: [client 100.100.100.11:52772] FastCGI: failed to connect to server "/usr/lib/cgi-bin/php56-fcgi-www": connect() failed
[Tue Feb 20 09:30:08.166574 2018] [fastcgi:error] [pid 27475] [client 100.100.100.11:52772] FastCGI: incomplete headers (0 bytes) received from server "/usr/lib/cgi-bin/php56-fcgi-www"
...

这是我在查看 Error.log 时注意到的内容,但我不知道为什么会这样说。 我检查了 php5.6-fpmphp7.0-fpmapache2 的状态,它们都是 3 个活跃的 (运行) 所以我不能再自救了,需要帮助。

因此不再需要答案,Thomas Christlieb 现在找到了问题所在。

在我的 000-default.conf FastCgiExternalServer 中,我的内部路径错误。

他把/run/php5.6-fpm.sock改成了/run/php/php5.6-fpm.sock

和/run/php7.0-fpm.sock到/run/php/php7.0-fpm.sock

现在一切正常。

谢谢。