Nginx/php5-fpm/Debian 上的 PhpMyAdmin 500 内部服务器错误

Nginx/php5-fpm/Debian 上的 PhpMyAdmin 500 内部服务器错误

我前段时间下载了 PhpMyAdmin,但一直无法让它正常工作。请求 localhost/phpmyadmin 会给出 500 内部服务器错误响应,但错误日志中没有任何内容。

这些是我执行的步骤:

  1. 下载最新的 phpmyadmin 并将所有文件解压到 /var/vhosts/phpmyadmin/www/
  2. 在 nginx 上创建了一个新的 php5-fpm 池和一个服务器块
  3. 更改 phpmyadmin/ 内所有文件的所有者
  4. 尝试请求 localhost/phpmyadmin 和 localhost/phpmyadmin/setup

phpmyadmin 在 chroot 中运行,并且所有文件都归 www-data 所有,因此这不应该是权限错误。

我在同一目录中创建了一个新的 php 文件来产生错误,但它记录得很好,所以它只是 phpmyadmin。

这是我的 php5-fpm 池:

[phpmyadmin]
listen = /var/vhosts/phpmyadmin/tmp/.php.sock;
user = www-data
group = www-data

chroot = /var/vhosts/phpmyadmin/
chdir = /

php_admin_value[error_reporting] = E_ALL
php_admin_value[error_log] = error.log
php_admin_flag[log_errors] = on
php_admin_flag[display_errors] = on

php_value[session.save_handler] = files
php_value[session.save_path] = /tmp

Nginx 服务器块:

server {
        listen   80;
        root /var/vhosts/phpmyadmin/www;
        server_name pma.domain;

        location / {
                try_files $uri $uri/ /index.html;
                autoindex on;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                include fastcgi_params;
                fastcgi_pass unix:/var/vhosts/phpmyadmin/tmp/.php.sock;
                fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;
                fastcgi_param DOCUMENT_ROOT /www;
        }

    index index.html index.htm index.php;
    try_files $uri $uri/ =404;

}

有什么想法可能出错了吗?为什么即使我强制打开它们,它也不会产生任何错误?

答案1

我找到了错误,现在我只需要找出如何修复它。在 common.inc.php 中有以下行:

date_default_timezone_set(@date_default_timezone_get());

由于 chroot(我认为无法读取 /usr/share/timezone),该函数无法工作,并且由于 @ 符号而无法产生错误。注释掉该行会产生致命错误:"date(): Timezone database is corrupt - this should never happen! in /www/libraries/core.lib.php on line 623"。如果我找不到更好的解决方案,我想我必须将时区目录复制到我拥有的每个虚拟主机。

编辑:使用 php-pear 安装 timezonedb,以便能够使用时区,而无需将它们全部复制到 chroot 中。

答案2

您是否已将listen.ownerlisten.group指令设置为该池的正确用户/组(通常是“www-data”)?

listen.owner = www-data
listen.group = www-data

相关内容