我在尝试修复使 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>