PHP FPM 工作,但忽略 SetHandler 的版本

And*_*w T 3 php apache2 php-fpm

我们的服务器是 Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-135-generic x86_64)。

我们按照https://tecadmin.net/install-multiple-php-version-apache-ubuntu/的指示,在 7.2 是新版本时恢复了 PHP 5.6 和 7.2,并升级并添加了 7.3 和 7.4直到今天早上都没有问题。昨天还运行得很好,但今天就不行了。我们昨天早些时候打包了更新,但它不需要重新启动,并且不相信它会在一夜之间自行重新启动,正如我们uptime所说的那样,我们已经接近 15 天了。

所以今天我们再次开始执行这个过程并完成了这个,在每一步之后重新启动 apache2:

尝试过:

a2enmod actions fcgid alias proxy_fcgi
Run Code Online (Sandbox Code Playgroud)

并得到:

ERROR: Module fcgid does not exist!
Run Code Online (Sandbox Code Playgroud)

确实apt install apache2 libapache2-mod-fcgid有效添加了软件包。

做了a2enmod actions fcgid alias proxy_fcgi,它说一切都已启用

检查了conf文件/etc/apache2/sites-enabled

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

尝试phpinfo()页面并得到 PHP 7.4.15,而不是预期的 5.6.40。我们对 7.3 做了同样的事情,并且phpinfo()使用 php7.3 的 SetHandler 也得到了相同的 7.4。

然后尝试systemctl status php5.6-fpmphp7.4-fpm得到了两者active (running)

我的文件供初学者使用,除了版本之外/etc/apache2/conf/php5.6-fpm.conf,文件php7.4-fpm.conf是相同的:mod_php5/7SetHandler

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php5.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(ar|p|tml)$">
        <If "-f %{REQUEST_FILENAME}">
            SetHandler "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost"
        </If>
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这里有错误还是我应该看看其他地方?

FWIW,我们有另一台具有类似设置的服务器,它也有同样的问题,但我们此时只需要该服务器上的 5.6 旧版应用程序,因此我们通过删除 中的指针文件并重新启动来禁用 /etc/apache2/conf-enabled/php7.4-fpm.conf7.4 apache2。但是,该服务器需要多个版本。

小智 5

改变:

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

为了:

<FilesMatch \.php$>
   <If "-f %{REQUEST_FILENAME}">
    SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost"
   </If>
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

  • 您能稍微解释一下您的提议吗?最好知道为什么需要进行这样的更改,而不是盲目地复制和粘贴一段代码。 (2认同)