phpmyadmin“503 服务不可用”:Unbuntu 20.04,MySQL 8.0

phpmyadmin“503 服务不可用”:Unbuntu 20.04,MySQL 8.0

我在让 phpmyadmin 重新工作时遇到了一个大问题(它以前在 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 服务不可用错误。我的其他网站大多运行正常(除了不存在的 php 页面显示为“未指定输入文件”,而不是 404)。

请注意,我的 web/phpmyadmin 服务器与 MySQL 服务器是分开的,后者位于不同的 IP 和服务器实例上(也在 Ubuntu 20.04 上运行)。

我在各种论坛上看到过并尝试过但都没有效果的方法:

  1. 我已经卸载并重新安装了 mysql-server 和 phpmyadmin

  2. 我已经启动/重新启动了 mysql 并确保它正在运行(我的其余网站运行良好)

  3. 在 my.cnf 中设置:default_authentication_plugin = mysql_native_password

  4. 我运行了“sudo dpkg-reconfigure phpmyadmin”。设置 TCP/IP 并选择主机名作为我的数据库服务器的 IP 地址。当我使用“root”和管理员用户名时,我收到此错误:“ERROR 1045 (28000):拒绝用户“root”@“(web-server-IP-address)”访问”

我在 MySQL 中有另一个“admin”用户名,配置为在我的 web/phpmyadmin IP 地址上使用,输入一次密码就可以了,但是程序第二次要求输入密码,然后我收到此错误:“错误 1045 (28000):拒绝用户‘phpmyadmin’@‘web-server-IP-address’访问”

  1. 在 apache 中,我将“Include /etc/phpmyadmin/apache.conf”添加到 /etc/apache2/apache2.conf

6 同样在 apache 中,我在 000-default.conf 中的“ DocumentRoot /var/www/html”后添加了以下内容:

<Directory "/var/www/html">
  AllowOverride All
</Directory>

7 我还执行了“sudo a2enconf phpmyadmin.conf”,并确认它是 conf-enabled 文件夹,然后重新启动了 apache2。

/etc/apache2/conf-available/phpmyadmin.conf 包含以下内容:

#phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php

    # limit libapache2-mod-php to files and directories necessary by pma
    <IfModule mod_php7.c>
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir 
/usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/:/usr/share/php/PhpMyAdmin/:/usr/share/php/Symfony/:/usr/share/php/Twig/:/usr/share/php/Twig-Extensions/:/usr/share/php/ReCaptcha/:/usr/share/php/Psr/Container/:/usr/share/php/Psr/Cache/:/usr/share/php/Psr/Log/:/usr/share/php/Psr/SimpleCache/
    </IfModule>

</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>

在其中一个 mysite.com.conf 文件中,我将子域 phpmyadmin 设置为:

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

我已经这样做了 2 天,但这些都没有任何效果,并且 503 服务不可用错误一直存在于我的 mysql.mysite.com phpmyadmin 页面上。我接下来应该尝试什么?

更新:

我终于成功使用了“sudo dpkg-reconfigure phpmyadmin”。我在 MySQL 服务器上手动创建了 phpmyadmin 用户,并赋予其对 phpmyadmin 数据库的所有权限。在 Web 服务器上运行“sudo dpkg-reconfigure phpmyadmin”后,一切顺利,结果如下:

dbconfig-common: writing config to /etc/dbconfig-common/phpmyadmin.conf
phpmyadmin already exists and has privileges on phpmyadmin.
dbconfig-common: dumping mysql database phpmyadmin to 
/var/tmp/phpmyadmin.phpmyadmin.2021-04-30-04.23.mysql.VeEHd6.
dbconfig-common: dropping old mysql database phpmyadmin.
dropping database phpmyadmin: success.
verifying database phpmyadmin was dropped: success.
creating database phpmyadmin: success.
verifying database phpmyadmin exists: success.
populating database via sql...  done.
dbconfig-common: flushing administrative password

不幸的是,我仍然陷入 503 服务不可用的困境......

更新2进一步缩小了范围。我在测试中发现,如果 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 设置了解不够。

答案1

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

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

相关内容