nginxでドキュメントルート外にphpMyAdminを設置する際にはまったこと

■環境
--------------------------------------
OS:AlmaLinux 8.5
MW:nginx 1.14.1
PHP 7.4.19
--------------------------------------
■ドキュメントルート
/var/www/vhosts/exmample.com/pubilc_html
■phpmyadminの配置ディレクトリ
/var/www/phpmyadmin
■Basic認証用htpasswdファイル
/var/www/vhosts/exmample.com/.htpasswd

こんにちは。ガジュマル育ててる人です。

今日も困ったことがあったので、自身のメモとして起こったことと解決方を記載しておきます。

要件としては、上記環境にてドキュメントルート外にphpMyadminのファイルを設置+Basic認証が必要でした。

まず、phpMyAdminは下記よりwgetしたものを配置ディレクトリに展開
https://files.phpmyadmin.net/phpMyAdmin/5.1.3/phpMyAdmin-5.1.3-all-languages.tar.gz

次に、nginxのexmample.comのディレクティブにlocationを設定を行いました。

location ~^/phpmyadmin/ {
auth_basic "Basic Authentication";
auth_basic_user_file /var/www/vhosts/exmample.com/.htpasswd;
root /var/www/;
index index.php;

location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^/phpmyadmin/(.+\.php)(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/phpmyadmin/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm-exmaple;
rewrite /phpmyadmin/(.*)$ /$1 break;
}

そして、https://exmample.com/phpmyadminへアクセスしたところ
phpMyAdminのログイン画面はまでは表示が可能。
ただ、パスワード認証にてログインしたところ
ログイン後にURLがhttps://exmample.com/index.phpへリダイレクトされるような挙動をしており、File Not found 404のエラーが発生していた。
(404のあとhttps://exmample.com/phpmyadminにもう一度アクセスすると正常にログイン後の動作ができる模様)

 

いろいろ調べてみた結果、phpmyadmin側でURLを書き換えているようだったため、

/var/www/phpmyadmin/config.inc.phpに追記することで、URLが書き換わって404エラーを回避した。

 

$cfg['PmaAbsoluteUri'] = 'http://'.$_SERVER['SERVER_NAME'].'/phpmyadmin/';