我在让 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 上运行)。
我在各种论坛上看到过并尝试过但都没有效果的方法:
我已经卸载并重新安装了 mysql-server 和 phpmyadmin
我已经启动/重新启动了 mysql 并确保它正在运行(我的其余网站运行良好)
在 my.cnf 中设置:default_authentication_plugin = mysql_native_password
我运行了“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’访问”
- 在 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>