最近我一直在尝试使用 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。