ConoHa VPS + Kusanagi で phpMyAdmin に2段階認証を設定する方法【超初心者向け】
こんにちは!今回はConoHa VPSでKusanagiを使ってWordPressを構築した後に、phpMyAdminに2段階認証(Basic認証)を設定する方法を紹介します。

実は私自身、この設定に2日間もかかってしまいました。同じように悩んでいる方の参考になれば嬉しいです!
- そもそもBasic認証って何?
- 事前に確認すること
- STEP 1:パスワードファイルを作成する
- STEP 2:nginxの設定ファイルを作る
- STEP 3:nginxにextra.confを読み込ませる
- STEP 4:nginxを再起動する
- STEP 5:動作確認
- STEP 6:phpMyAdminの設定ファイルを整える
- まとめ
- ハマりやすいポイント
- 1. phpMyAdmin のインストールコマンドが存在しなかった
- 2. nginx のコマンドが見つからなかった
- 3. 設定ファイルの中身が不完全だった
- 4. 設定が重複してしまった
- 5. serverブロックの外に設定を書いてしまった
- 6. WordPress の PHP 設定が優先されて Basic認証が効かなかった
- 7. HTTP と HTTPS で別々の設定が必要だった
- 🗺️ トラブルの全体図
- ✅ まとめ:同じ失敗をしないために
そもそもBasic認証って何?
phpMyAdminはデータベースを管理できるツールです。つまりWordPressのすべてのデータが入っている場所にアクセスできる、とても重要なツールです。
もしphpMyAdminが誰でも自由に開ける状態だと、悪い人に入られてデータを盗まれたり、サイトを壊されたりする危険があります。
そこで使うのがBasic認証です。
Basic認証とは、ページを開こうとするとユーザー名とパスワードを入力する画面が出てくる仕組みのことです。
phpMyAdminにBasic認証を設定することで、2段階のログインが必要になります。
- まずBasic認証のユーザー名・パスワードを入力
- 次にphpMyAdmin自体のログイン画面でユーザー名・パスワードを入力
事前に確認すること
- ConoHa VPS を使っている
- Kusanagi で WordPress を構築済み
- phpMyAdmin を手動でインストール済み
(/home/kusanagi/サイト名/DocumentRoot/phpmyadmin/)

STEP 1:パスワードファイルを作成する
まずはBasic認証で使うユーザー名とパスワードのファイルを作ります。
ConoHaのコンソール画面からサーバーにログインして、以下のコマンドを実行してください。
1-1:保存用フォルダを作る
mkdir -p /home/kusanagi/.authmkdirは「フォルダを作る」コマンドです。-pをつけると途中のフォルダも一緒に作ってくれます。
1-2:パスワードファイルを作る
まずはBasic認証で使うユーザー名とパスワードのファイルを作ります。
htpasswd -c /home/kusanagi/.auth/.htpasswd admin
実行すると以下のようなメッセージが出ます。
New password:
Re-type new password:
Adding password for user admin
好きなパスワードを入力してください(入力中は文字が表示されませんが正常です)。
ここで設定したパスワードを必ずメモしておきましょう!
STEP 2:nginxの設定ファイルを作る
次に「/phpmyadmin/にアクセスしたときにBasic認証を要求する」という設定をnginxに教えます。
2-1:設定フォルダを作る
mkdir -p /home/kusanagi/サイト名/config/nginx
※「サイト名」は自分のサイト名に変えてください(例:you_site)
2-2:設定ファイルを1行ずつ作る
以下のコマンドを1つずつ実行してください。
echo 'location ^~ /phpmyadmin/ {' > /home/kusanagi/サイト名/config/nginx/extra.conf
echo ' auth_basic "Restricted";' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo ' auth_basic_user_file /home/kusanagi/.auth/.htpasswd;' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo ' location ~ \.php$ {' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo ' auth_basic "Restricted";' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo ' auth_basic_user_file /home/kusanagi/.auth/.htpasswd;' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo ' include conf.d/fastcgi.inc;' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo ' }' >> /home/kusanagi/サイト名/config/nginx/extra.conf
echo '}' >> /home/kusanagi/サイト名/config/nginx/extra.conf
2-3:ちゃんと作れたか確認する
cat /home/kusanagi/サイト名/config/nginx/extra.conf
以下のように表示されればOKです!
location ^~ /phpmyadmin/ {
auth_basic "Restricted";
auth_basic_user_file /home/kusanagi/.auth/.htpasswd;
location ~ \.php$ {
auth_basic "Restricted";
auth_basic_user_file /home/kusanagi/.auth/.htpasswd;
include conf.d/fastcgi.inc;
}
}
STEP 3:nginxにextra.confを読み込ませる
作った設定ファイルをnginxに読み込ませます。
3-1:Pythonスクリプトを作る
echo "f='/etc/opt/kusanagi/nginx/conf.d/サイト名.conf'" > /tmp/fix.py
echo "t=open(f).read()" >> /tmp/fix.py
echo "old='include conf.d/acme.inc;'" >> /tmp/fix.py
echo "new=old+'\\n include /home/kusanagi/サイト名/config/nginx/extra.conf;'" >> /tmp/fix.py
echo "open(f,'w').write(t.replace(old,new,1))" >> /tmp/fix.py
echo "print('done')" >> /tmp/fix.py
3-2:スクリプトを実行する
python3 /tmp/fix.py
3-3:正しく追加されたか確認する
grep -n "extra\|acme" /etc/opt/kusanagi/nginx/conf.d/サイト名.conf
extra.confの行番号がacme.incの行番号の直後になっていればOKです。
STEP 4:nginxを再起動する
設定を反映させます。
4-1:設定ファイルにエラーがないか確認
/opt/kusanagi/nginx129/sbin/nginx -t
以下のように表示されればOKです。
4-2:nginxを再起動
kusanagi restart
restart completed.と表示されればOKです!
STEP 5:動作確認
ブラウザで以下にアクセスします。
http://サーバーのIPアドレス/phpmyadmin/
ユーザー名とパスワードを入力するダイアログが表示されたら成功です!
- ユーザー名:
admin - パスワード:STEP 1-2で設定したパスワード
STEP 6:phpMyAdminの設定ファイルを整える
最後にphpMyAdmin自体の設定も整えましょう。
6-1:設定ファイルをコピーする
cp /home/kusanagi/サイト名/DocumentRoot/phpmyadmin/config.sample.inc.php \
/home/kusanagi/サイト名/DocumentRoot/phpmyadmin/config.inc.php
6-2:viエディタで設定ファイルを開く
vi /home/kusanagi/サイト名/DocumentRoot/phpmyadmin/config.inc.php
6-3:16行目に移動する
viが開いたら以下を入力してEnterを押します。
:16
6-4:編集モードに入る
i
画面下に— INSERT —と表示されたらOKです。
6-5:ランダム文字列を入力
‘ ‘の間にカーソルを移動して、32文字以上のランダムな文字列を入力します。
AbCdEfGhIjKlMnOpQrStUvWxYz123456
6-6:保存して終了
EscキーでINSERTモードを抜けてから
:wq
を入力してEnterを押せば完了です!
まとめ
| STEP | 内容 |
|---|---|
| STEP 1 | パスワードファイルの作成 |
| STEP 2 | Basic認証の設定ファイルを作成 |
| STEP 3 | nginxにextra.confを読み込ませる |
| STEP 4 | nginxを再起動 |
| STEP 5 | 動作確認 |
| STEP 6 | phpMyAdminの設定ファイルを整える |
ハマりやすいポイント
その1:nginxのパスが普通と違う
KusanagiのnginxはPATHが通っておらず、nginx -tでは動きません。
/opt/kusanagi/nginx129/sbin/nginx -t
その2:HTTPとHTTPSで別々に設定が必要
you_site.confにはHTTPブロックとHTTPSブロックの2つがあります。
両方にextra.confを読み込ませないと片方でBasic認証が効きません。
その3:コマンドが長いと途切れる
ConoHaのコンソールは長いコマンドが途切れることがあります。
長いコマンドは分割して1行ずつ実行しましょう。
2日かかった話【失敗談と解決策まとめ】

同じところで詰まっている方の参考になれば嬉しいです!
ConoHa VPS に Kusanagi を使って WordPress を構築した後、データベースを管理するために phpMyAdmin を導入しようとしました。さらにセキュリティのため Basic認証(2段階のログイン) を設定しようとしたのですが、これが思った以上に大変でした。
1. phpMyAdmin のインストールコマンドが存在しなかった
▶ 何をしたか
ネットで調べると「Kusanagi では以下のコマンドでインストールできる」という記事が多数出てきました。
kusanagi addon install pma you_site✕ 何が起きたか
kusanagi addon install: error: argument module: invalid choice: 'pma'
(choose from zabbix, gemini)! 原因
Kusanagi がバージョンアップして pma コマンドが廃止されていました。
現在の Kusanagi では addon install で使えるのは zabbix と gemini のみです。ネット上の古い記事を参考にしていたことが原因でした。
✓ 解決策
phpMyAdmin を手動でダウンロードして設置することで解決しました。
cd /tmp
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
tar zxvf phpMyAdmin-latest-all-languages.tar.gz
mv /tmp/phpMyAdmin-*/ /home/kusanagi/you_site/DocumentRoot/phpmyadmin💡 教訓
ネットの記事は公開日を必ず確認しましょう!Kusanagi のような頻繁にアップデートされるソフトウェアは、古い記事の情報が使えないことがあります。
2. nginx のコマンドが見つからなかった
▶ 何をしたか
設定ファイルを作った後、エラーがないか確認しようとしました。
nginx -t✕ 何が起きたか
-bash: nginx: command not found! 原因
Kusanagi の nginx は特殊な場所にインストールされており、通常のパスが通っていませんでした。
find コマンドで探したところ、正しいパスは以下でした。
/opt/kusanagi/nginx129/sbin/nginx✓ 解決策
フルパスで実行することで解決しました。
/opt/kusanagi/nginx129/sbin/nginx -t💡 教訓
Kusanagi 環境では通常の Linux コマンドが使えないことがあります。find / -name "nginx" -type f で場所を探しましょう。
3. 設定ファイルの中身が不完全だった
▶ 何をしたか
Basic認証の設定ファイル(extra.conf)を以下のように作りました。
auth_basic "Restricted";
auth_basic_user_file /home/kusanagi/.auth/.htpasswd;✕ 何が起きたか
nginx の設定チェックでエラーが出ました。
! 原因
location { } ブロックで囲まないと、nginx はどの URL に設定を適用すればいいか理解できません。
正しくは以下のように書く必要がありました。
location ^~ /phpmyadmin/ {
auth_basic "Restricted";
auth_basic_user_file /home/kusanagi/.auth/.htpasswd;
}💡 教訓
nginx の設定はどの URL に適用するかを location で必ず指定する必要があります。
4. 設定が重複してしまった
▶ 何をしたか
設定がうまくいかず、同じコマンドを何度も実行してしまいました。
echo 'include /home/.../extra.conf;' >> default.conf✕ 何が起きたか
同じ行が 4行も重複してしまいました。
include /home/kusanagi/you_site/config/nginx/extra.conf;
include /home/kusanagi/you_site/config/nginx/extra.conf;
include /home/kusanagi/you_site/config/nginx/extra.conf;
include /home/kusanagi/you_site/config/nginx/extra.conf;✓ 解決策
ファイルを一度リセットして1行だけ書き直しました。
>> は追記、> は上書きです。
echo 'include /home/.../extra.conf;' > default.conf💡 教訓
>> は追記、> は上書きです。ファイルをリセットしたい時は > を使いましょう。
5. serverブロックの外に設定を書いてしまった
✕ 何が起きたか
設定が } の外側に追記されてしまいました。
include conf.d/fcache_purge.inc;
} ← serverブロックの終わり
include /home/.../extra.conf; ← ここに入ってしまった(無効!)! 原因
nginx の設定は必ず server { } ブロックの内側に書かないと無効になります。
✓ 解決策
Python スクリプトを使って正しい位置に挿入しました。
💡 教訓
nginx の設定ファイルを手動で編集するときは } の位置に注意しましょう。設定後は必ず nginx -t でチェックしましょう。
6. WordPress の PHP 設定が優先されて Basic認証が効かなかった
✕ 何が起きたか
設定ファイルを正しく作って nginx を再起動しても、Basic認証のダイアログが出ずにphpMyAdmin の画面が直接表示されてしまいました。
! 原因
Kusanagi の WordPress 用 nginx 設定(you_site.wp.inc)の中に、PHP ファイルを処理する以下のルールがありました。
location ~ [^/]\.php {
...
}nginx には location の優先順位 というルールがあります。~(正規表現)の location は通常の location より優先されるため、phpMyAdmin の PHP ファイルにアクセスすると WordPress のルールが先に適用されてしまい、Basic認証がスキップされていました。
✓ 解決策
^~ という特別な指定を使いました。
location ^~ /phpmyadmin/ {
auth_basic "Restricted";
auth_basic_user_file /home/kusanagi/.auth/.htpasswd;
location ~ \.php$ {
auth_basic "Restricted";
auth_basic_user_file /home/kusanagi/.htpasswd;
include conf.d/fastcgi.inc;
}
}💡 教訓
nginx の location には優先順位があります。
① =(完全一致) → ② ^~(正規表現より優先) → ③ ~(正規表現) → ④ 通常の前方一致
7. HTTP と HTTPS で別々の設定が必要だった
✕ 何が起きたか
extra.conf の読み込みを追加してもまだ Basic認証が表示されませんでした。
! 原因
you_site.conf の中には実は 2つのサーバーブロックがあります。
server {
listen 80; ← HTTPブロック
...
}
server {
listen 443; ← HTTPSブロック
...
}extra.conf の読み込みを HTTPS ブロックにしか追加していなかったため、http:// でアクセスすると Basic認証が効きませんでした。
✓ 解決策
HTTP ブロックにも extra.conf の読み込みを追加して解決しました。
💡 教訓
nginx の設定ファイルには HTTP と HTTPS で別々のサーバーブロックがあります。両方に設定を追加しないと片方でしか効きません。
🗺️ トラブルの全体図
1
phpMyAdmin コマンドが廃止
→ 手動インストールで解決
2
nginx のパスが特殊
→ /opt/kusanagi/nginx129/sbin/nginx を使う
3
extra.conf に location ブロックがない
→ location ^~ /phpmyadmin/ で囲む
4
設定が4行重複
→ ファイルをリセットして書き直し
5
server ブロックの外に設定が入った
→ Python スクリプトで正しい位置に挿入
6
WordPress の PHP 設定が優先された
→ location ^~ を使って優先順位を上げる
7
HTTP ブロックにしか設定がなかった
→ HTTP・HTTPS 両方のブロックに追加
🎉
2日後にようやく解決!
✅ まとめ:同じ失敗をしないために
| ポイント | 対策 |
|---|---|
| 古い記事に注意 | 記事の公開日を確認する |
| nginx のパス | /opt/kusanagi/nginx129/sbin/nginx -t を使う |
| 設定変更後は必ず確認 | nginx -t でエラーチェック |
| location の優先順位 | phpMyAdmin には ^~ を使う |
| HTTP / HTTPS 両方に設定 | you_site.conf の2つのブロック両方に追加 |
| コマンドの重複実行に注意 | >> と > の違いを意識する |

2日間かけてたどり着いた結論は意外とシンプルでした。
同じところでハマっている方の参考になれば嬉しいです!
なぜ、ぐちゃぐちゃになってしまったかと言うと、コンソールボックスに入力したものが途中で切れてたにも関わらず、次のコードを書き続けてしまった事に気づかなかったw
















コメント