Apache:子域上的 phpmyadmin“503 服务不可用”:php7.4-fpm

Apache:子域上的 phpmyadmin“503 服务不可用”:php7.4-fpm

我在尝试修复使 phpmyadmin 再次运行的主要问题时遇到了困难(它以前在 ubuntu 16.04 上可以运行)。我昨天将 Ubuntu 16.04 升级到 20.04,并获得了以下版本的内容:

MySQL 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64
PHP7.4-fpm
Apache 2.4.41
phpmyadmin 4:4.9.5+dfsg1-2

当我访问常用的 phpmyadmin 页面(如“mysql.mysite.com”)时,我收到 503 服务不可用错误。我的其他网站大多运行正常。但是,与 phpmyadmin 连接的子域名已损坏。

我的服务器现在使用 php7.4-fpm 进行设置,每个用户名都使用 pool.d 套接字。以前使用 php7.0-fpm 时也是这样。当我完成更新时,所有网站都无法使用,我不得不在半夜加班,以防万一,让主要网站域名部分恢复运行(我最终能够按照下文所述进行操作)。

在我 apache 上的 website.com.conf 中,我曾经有类似这样的内容:

<VirtualHost *:80>

<IfModule mod_fastcgi.c>
  AddHandler php7-fcgi-username .php
  Action php7-fcgi-username /php7-fcgi-username
  Alias /php7-fcgi-username /usr/lib/cgi-bin/php7-fcgi-username
  FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-username -socket /run/php/php7.4-fpm.username.sock -idle-timeout 300 -pass-header Authorization
  <Directory "/usr/lib/cgi-bin">
    Require all granted
  </Directory>
</IfModule>

....
<IfModule mod_fastcgi.c>
  <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler php7-fcgi-username
  </FilesMatch>
</IfModule>

</VirtualHost

现在我有类似下面的内容,并且每个主要网站现在都可以运行:

<VirtualHost *:80>

<FilesMatch ".php$">
  SetHandler "proxy:unix:/var/run/php/php7.4-fpm.username.sock|fcgi://localhost/"
</FilesMatch>

</VirtualHost>

对于我的子域(我无法使其工作),我有一段类似于以下内容的代码块:

<VirtualHost *:80>
  .....
  ServerName mysql.mysite.com
  DocumentRoot /usr/share/phpmyadmin
  <Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride None
  </Directory>
  .....
</VirtualHost>

为了测试,我甚至尝试了类似这样的操作:

<VirtualHost *:80>
  .....
  ServerName mysql.mysite.com
  DocumentRoot /usr/share/TEST   # test directory
  <Directory /usr/share/TEST>
    Options FollowSymLinks
    DirectoryIndex index.php    # index.php contains one line of code: echo "test";
    AllowOverride None
  </Directory>
  .....
</VirtualHost>

使用 index.php 文件中的一行代码作为测试,但我仍然收到 503 服务不可用错误。

此外,我还启用了以下模式:

access_compat.load authn_core.load autoindex.load filter.load mpm_event.load proxy.load security2.load status.conf action.conf authn_file.load deflate.conf headers.load negotiation.conf proxy_wstunnel.load setenvif.conf status.load action.load authz_core.load deflate.load http2.load negotiation.load reqtimeout.conf setenvif.load unique_id.load alias.conf authz_host.load dir.conf mime.conf proxy.conf reqtimeout.load socache_shmcb.load userdir.conf alias.load authz_user.load dir.load mime.load proxy_fcgi.load rewrite.load ssl.conf userdir.load auth_basic.load autoindex.conf env.load mpm_event.conf proxy_http.load security2.conf ssl.load

我还启用了以下配置:

charset.conf javascript-common.conf localized-error-pages.conf other-vhosts-access-log.conf php5.6-fpm.conf php7.4-fpm.conf security.conf serve-cgi-bin.conf

我希望有更多经验的人能对这类事情提供一些建议。

更新 我在测试中发现,如果 DirectoryIndex 是 HTML 文件而不是 PHP 文件,则此方法有效:

<VirtualHost *:80>
  .....
  ServerName mysql.mysite.com
  DocumentRoot /usr/share/TEST   # test directory
  <Directory /usr/share/TEST>
    Options FollowSymLinks
    DirectoryIndex index.html    # index.html contains the text "test"
    AllowOverride None
  </Directory>
  .....
</VirtualHost>

但是,它不会运行简单的单行 index.php 文件,这会导致 503 服务不可用错误。同样,我的其余 php 文件在我的主站点上运行,但它没有通过此子域设置运行 phpmyadmin 或任何 php 文件。似乎可能有一个非常简单的解决方案,但我对 apache/php 设置了解不够。

解决了 如果其他人遇到此问题,我必须将以下块添加到我的子域 VirtualHost:

<FilesMatch ".php$">
  SetHandler "proxy:unix:/var/run/php/php7.4-fpm.username.sock|fcgi://localhost/"
</FilesMatch>

答案1

如果其他人遇到此问题,我必须将以下块添加到我的子域 VirtualHost,phpmyadmin 就会再次出现在子域上:

<FilesMatch ".php$">
  SetHandler "proxy:unix:/var/run/php/php7.4-fpm.username.sock|fcgi://localhost/"
</FilesMatch>

相关内容