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

Seb*_*eld 5 php nginx alias fastcgi

最近我一直在尝试使用 Nginx(我通常使用 Apache)来设置 Web 服务器。但是,我在尝试将 phpMyAdmin 设置为alias 时遇到了问题。别名也正确地带您进入 phpMyAdmin 登录屏幕,但是当您输入有效凭据并点击开始时,您最终会返回登录屏幕而没有错误。

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

我的 php 别名的 Nginx 配置如下:

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;
}
Run Code Online (Sandbox Code Playgroud)
  • 我正在运行 Nginx 0.8.53
  • PHP 5.3.3
  • MySQL 5.1.47
  • phpMyAdmin 3.3.9 - 自行安装
  • 并且安装了php-mcrypt。

有没有其他人经历过这种行为?任何人都对如何解决它有任何想法?

0sc*_*car 7

我有同样的问题。我运行了一个带有 doc root 的网站,/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;
}
Run Code Online (Sandbox Code Playgroud)

这似乎有效,除了当我登录时,就像你描述的那样,我又看到了首页。没有错误,什么都没有。如果我使用错误的密码登录,我会收到“无法登录 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;
}
Run Code Online (Sandbox Code Playgroud)

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