使用 Nginx 别名导致 phpMyAdmin 登录无限循环

使用 Nginx 别名导致 phpMyAdmin 登录无限循环

最近我一直在尝试使用 Nginx 设置 Web 服务器(我通常使用 Apache)。然而,我在尝试在别名。别名正确地将您带到 phpMyAdmin 登录屏幕,但是当您输入有效的凭据并点击“开始”时,您最终会回到登录屏幕并且没有任何错误。

对我来说,这听起来像是 cookie 或会话问题……但如果我符号链接 phpMyAdmin 目录并尝试通过符号链接版本登录,它就可以正常工作!符号链接和别名都设置了相同数量的 cookie,并且两者似乎都为正确的域和路径设置了 cookie。

我的 Nginx php 别名配置如下:

location ~ ^/phpmyadmin/(.*\.php)$ {
    alias /usr/share/phpMyAdmin/$1;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $request_filename;
}
  • 我正在运行 Nginx 0.8.53
  • PHP 5.3.3
  • MySQL 5.1.47
  • phpMyAdmin 3.3.9 - 自行安装
  • 并且 php-mcrypt 已安装。

以前有人遇到过这种情况吗?有人知道如何解决它吗?

答案1

我遇到了完全相同的问题。我运行了一个带有文档根目录的网站,/var/www/somesite并想将 phpmyadmin 挂接到网站上的某个子文件夹中。我在 nginx 中使用以下配置尝试了此操作:

root /var/www/somesite;

location /pma/ {
    alias /usr/share/phpmyadmin/;
}

location ~ ^/pma/(.+\.php)$ {
    alias /usr/share/phpmyadmin/$1;
    fastcgi_pass   unix:/tmp/phpfpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $request_filename;
    include fastcgi_params;
}

这似乎有效,但当我登录时,就像您所描述的那样,我又看到了首页。没有错误,什么都没有。如果我使用错误的密码登录,我会收到“无法登录 MySQL 服务器”错误,正如您所预料的那样。

解决方案
最后,我把所有东西都拖进去fastcgi_params,发现更改DOCUMENT_ROOT-parameter 解决了这个问题。因此上面的 nginx-config 更改为:

root /var/www/somesite;

location /pma/ {
    alias /usr/share/phpmyadmin/;
}

location ~ ^/pma/(.+\.php)$ {
    alias /usr/share/phpmyadmin/$1;
    fastcgi_pass   unix:/tmp/phpfpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $request_filename;

    # From fastcgi_params
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      /usr/share/phpmyadmin; # <-- Changed
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    fastcgi_param  REDIRECT_STATUS    200;
}

(旁注:我认为这是 nginx 的问题,您不能同时设置别名和文档根。实际上,很奇怪。)

答案2

这是我的配置:

location /phpmyadmin {
    alias   /usr/share/phpmyadmin;
    index index.php;
    location ~ /([^/]+\.php)$ {
        try_files /$1 =404;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        location ~ /phpmyadmin/js/([^/]+\.php)$ {
            try_files /phpmyadmin/js/$1 =404;
            fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

答案3

Igor 指出你的确切配置应该可以工作:

http://forum.nginx.org/read.php?2,3059,3060#msg-3060

您可以在那里发帖看看他们说什么;您的配置对我来说也完全有效。

答案4

如果您在 Nginx + phpfpm 下运行 phpMyAdmin,那肯定是所有权问题。请采取以下步骤解决此问题:
1. 查看位于 /etc/php-fpm.d/www.conf 的 php-Fpm 配置文件中的“session.save_path”值(默认值为“/var/lib/php/session”)。listen.owner 用户和组必须拥有此处定义的路径文件夹。2.
以 sudo 身份运行“chown -R nginx:nginx /var/lib/php/session”来修复此问题。3
. 您现在应该能够毫无问题地登录 phpMyAdmin。

相关内容