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

标签 php linux apache2 linux-mint

(通过教程,之后在 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 Server + fpm 模块,我按照以下步骤操作:
  • sudo apt-get install apache2 apache2-utils mysql-server phpmyadmin
  • sudo a2dismod php7.2 (which was installed with phpmyadmin)
  • sudo add-apt-repository ppa:ondrej/php
  • sudo apt-get update && sudo apt-get upgrade
  • sudo apt-get install libapache2-mod-fastcgi libapache2-mod-fcgid
  • 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
  • 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
  • sudo a2enmod actions
  • sudo a2enmod fastcgi
  • sudo a2enmod fcgid
  • sudo a2enmod rewrite
  • sudo a2enmod suexec
  • sudo a2enmod include (a2enmod 只是为了检查它们是否已经启用)
  • sudo service apache2 restart (重新启动服务器,以便正确加载所有内容)
  • /etc/apache2/sites-available 中创建了 2 个文件, 一个 php56.conf , 一个 php70.conf
  • /var/www/html 中创建了 2 个目录,一个 PHP 5.6,一个 PHP 7.0
  • sudo a2dissite 000-default (禁用默认站点)
  • sudo a2ensite php56 php70 (启用 PHP 5.6 和 PHP 7.0 站点)
  • sudo service apache2 restart
  • /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>
    
  • /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>
    
  • 在 PHP 5.6 和 PHP 7.0 目录中,我创建了一个文件 info.php
    <?php phpinfo() ?>
    
  • 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 ...



    但是当我在 Web 浏览器中打开 PHP 5.6 站点时,它会显示完全相同的 phpinfo()输出。
    所以我尝试禁用 PHP 7.0 站点以检查我的 PHP 5.6 配置是否损坏。
    sudo a2dissite php70
    sudo service apache2 reload
    

    现在,当我打开 PHP 5.6(与 PHP 7.0 相同)时,它会显示 phpinfo对于这样的 PHP 5.6 版:

    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 寻求帮助,并根据他的指示,我做了以下事情:
  • a2dissite php56 php70 (禁用两个站点配置文件)
  • a2ensite 000-default (再次启用默认配置文件)
  • 对“/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>
    
  • sudo service apache2 restart (重新加载新配置)

  • 所以但是现在当我打开两个站点时,我得到完全相同的错误消息“内部服务器错误”,但这两条消息的字体不同,
    我想这可能意味着它应该像这样工作,因为否则它们应该完全相同,还是我错了?

    我用谷歌搜索了很多,也在这里查找,但这个问题并没有真正存在,因为我在我的配置中没有使用 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"
    ...
    

    错误日志信息
    ...
    [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-fpm 的状态, php7.0-fpm , apache2 ,他们都是 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

    现在一切正常。

    谢谢。

    关于php - LAMP 服务器上的多个 php-fpm 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48885230/

    相关文章:

    c - Apache 访问模块的 server_rec

    linux - 使Apache2在json中提供目录索引

    php - PHP mail()不发送电子邮件

    javascript - Symfony 3 Infinite Scroll for Announce

    php - Git 在 merge 分支时混合两个函数

    apache - 使用 Apache 将顶级域移动到子目录以在同一域上托管多个站点

    php - 英国 IP 地址查询 API

    linux - binutils 为 readelf 报错

    linux - 在 Raspberry Pi 上部署

    linux - 如何在 linux 中更改其安装目录时使用命令?