Псевдоним с использованием Nginx вызывает бесконечный цикл входа в систему phpMyAdmin
Недавно я пытался настроить веб-сервер с помощью Nginx (я обычно использую Apache). Однако я столкнулся с проблемой, пытаясь настроить phpMyAdmin на псевдоним. Псевдоним также корректно отображает экран входа phpMyAdmin, однако, если вы введете действительные учетные данные и нажмете кнопку go, вы снова окажетесь на экране входа в систему без ошибок.
Для меня это звучит как проблема с файлом 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 установлен.
Кто-нибудь еще испытывал такое поведение раньше? У кого-нибудь есть идеи о том, как это исправить?
4 ответа
У меня была точно такая же проблема. Я запустил веб-сайт с корнем документа в /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;
}
Кажется, это работает, за исключением того, что когда я вошел в систему, как вы описали, я просто снова увидел первую страницу. Нет ошибок, ничего. Если я вошел в систему с неверным паролем, я получил ошибку "Cannot login to MySQL server", как и следовало ожидать.
Решение
Наконец то, что я сделал, я втянул во все вещи из fastcgi_params
и обнаружил, что изменение DOCUMENT_ROOT
-параметр исправил это. Таким образом, 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, потому что вы не можете установить псевдоним и корень документа одновременно. Странно, на самом деле.)
Это мой конфиг:
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;
}
}
}
Если вы используете phpMyAdmin под Nginx + phpfpm, это, безусловно, проблема с правами собственности. Для решения этой проблемы выполните следующие действия:
1. Посмотрите на значение "session.save_path" (значение по умолчанию "/var/lib/php/session") в файле конфигурации php-Fpm, расположенном в /etc/php-fpm.d/www.conf. Пользователь и группа listen.owner должны иметь указанную там папку пути.
2. Запустите "chown -R nginx:nginx /var/lib/php/session" как sudo, чтобы исправить это.
3. Теперь вы можете войти в phpMyAdmin без каких-либо проблем.
Игорь указывает, что ваш конфиг должен работать:
http://forum.nginx.org/read.php?2,3059,3060
Вы можете написать там и посмотреть, что они говорят; Ваш конфиг выглядит полностью действительным для меня тоже.