Alias using Nginx causing phpMyAdmin login endless loop
I had the exact same problem. I ran a website with a doc root in /var/www/somesite
and wanted to hook phpmyadmin to some sub-folder on the site. I tried this with this config in 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;
}
This seemed to work, except when I logged in, like you described, I just saw the front page again. No errors, nothing. If I logged in with a bad password, I got a "Cannot login to MySQL server"-error, as you'd expect.
Solution
Finally what I did was I dragged in all the stuff from fastcgi_params
and found that changing the DOCUMENT_ROOT
-parameter fixed this. So the nginx-config above changed to:
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;
}
(Side note: I think this a problem with nginx, that you can't set an alias and the doc root at the same time. Weird, actually.)
This is my config:
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;
}
}
}