NeGiMeMo.net

ねぎさんのメモ帳。日常・メモ・ときどきWordPress。

ロリポップ!の新サーバに切り替えたらBASIC認証がおかしくなった話

bell賞味期限切れコンテンツ

この記事は公開または最終更新から553日くらい経過しています。
このメッセージが表示されている記事(特にプログラミング系)は情報が古くなっている可能性があるので注意して下さい。

ちょっと焦りました。どうやらBASIC認証の記述に問題があったっぽいです。
とりあえずはなおったので経過をメモっておきます。

ロリポップ!のサーバーが新しくなるとかで先行移設がどうみたいな案内はきてたんですが、あまり気にしてなかったんですよね。別に必須のものでもないし、放っておいてもそのうち自動的に切り替わるって話だったので。

ただ、メールを整理してたら、どうも新しいサーバーに移行するとモジュール版のPHPが使えるようになるということで、以降を決意しました。

メールで何度も届いてた事前移設受付の手順に従って作業したんですが、これ、開始ボタンを押すと即作業が始まってしまうんですね。

ボタンを押すと申し込み画面になって、作業開始時間とかを入力するもんだとばかりおもってたんですが違ったようでかなり焦りました。(開始=本当に作業開始で、受付ステップを開始じゃなかったようです)まぁ、ちゃんと細かいところまで確認しないで始めてしまったのも悪いんですけどね。

最長1日程度かかるということで告知とかしてなかったからどうしたもんかと思いましたが、もともとそんなにファイルが無かったので結局1時間とかからず完了しました。

完了しましたってメールは来ました。

しかし、アクセスはできません。
でも作業中の 403 (だったかな?)から 500 エラーに変わっていたので恐らく作業は間違いなく終わっているようです。

403は権限がない状態、つまり作業中だからアクセスしないでねみたいな感じですが、500エラーというのは内部エラーです。プログラムに問題があって動かないとか、あとは .htaccess の記述ミスによって発生することも有ります。

500エラーになる場合はとりあえず .htaccess を疑う

上にも書いたように、いきなり500エラーになる場合って、.htaccess に問題が発生してることが多いらしいです。
ログをみたりするとどこが原因かすぐわかるらしいんですが、ロリポップ!はサーバーのエラーログをどこから見れば良いのかよくわかりませんでした。

ですが、普通に考えてこれまで WordPress はこれまで正常に動作していたものですし、そもそも公開されている安定版を使っている以上いきなり動かなくなることも考えにくいです。
また、PHPをCGI版からモジュール版にきりかえていますが、それが原因とも考えにくいです。(ローカルのテスト環境ではモジュール版で動いてましたし)

となると、考えられるのは .htaccess のほうが怪しいんじゃないかな、というかそっちの可能性がかなり大きいと思います。(もちろんケースバイケースではありますが)

ということで、とりあえず .htaccess から疑ってみるのが良いと思います。

そんなわけで早速現行の .htaccess をダウンロードしてきて、サーバーのやつは削除(というかリネーム退避)したところ、なんと、表示されました。あっさり原因発見です。

あとは、このなかのどの記述が怪しいのか…ってことになってきますが、私のサイトの .htaccess では大きく WordPress が書き出す部分と、MOD EXPIRES の設定、そしてBASIC認証の設定の3種類が書かれていましたので、順番に消したり戻したりしてどれが原因か調べてみます。

検証1:まずは、MOD EXPIRES と BASIC認証を削除して再アップ。

つまり、WordPressの設定だけの状態ですね。これでもダメだったら…まぁ再生成かしら。
結果:表示できる

はい。問題なく表示できました。つまり、WordPress が吐き出している部分に問題はない、ということですね。

検証2:MOD EXPIRES だけ有効化

順番はどっちでもよかったんですが、私のとこはこの順に書いてあったからってこっちからテストすることに。
結果:表示できる

これも問題なく表示できました。

ということはつまり、BASIC認証に問題があるようです。

一応検証3:BASIC認証だけ有効化

ほぼ原因はわかりましたが、一応ね。組み合わせが原因って場合も考えられるんでこっちも試してみました。
結果:500エラー

はい。犯人は間違いなくこいつです。

BASIC認証の設定を見直す

このサイトのBASIC認証の設定は以前記事にした方法で記述されているんですが、これまでは問題なく動いていたんだけどなぁ…。

試しに .htaccess と .htpasswd をバックアップしてから[*1] 、ロリポップ!標準のアクセス制限機能をつかって制限を書けてみると…ちゃんとBASIC認証も動くしサイトも表示されました。

つまり、BASIC認証の記述の仕方に問題があるってことで間違いなさそうです。

というわけで、別の書き方を試してみることにしました。

大きく違うのは、今までの方法では、

  • サイト全体にBASIC認証をかける
  • でも認証無しでも閲覧できるように設定する
  • ただし、Files で指定した wp-config.php と wp-admin/ 以下は認証が必要にする
  • だけども wp-admin 以下の admin-ajax.php は認証を不要とする

みたいな感じでした。

それに対し新し方法は

  • Files で指定した wp-login.php のみに認証をかける

という非常にシンプルな方式です。

前回ほど厳重ではないんですが、管理画面にはいるには基本的には wp-login.php を経由する[*2] わけだし多分大丈夫なんだろうな、と。たぶん。

で、これでアップロードしてみたところ、見事表示されました。
もちろんログイン時にベーシック認証のダイアログも出ます。

結論。これまでのBASIC認証の書き方がダメになったらしい。

しかし、なんで使えなくなってしまったのか…というのはまだ謎のままです。
もしかしたらサーバーの仕様が変わったのでしょうか?

とりあえず今も WordPress の不正ログイン対策用プラグインは有効になってるんでこの設定でログを見ながら様子見しようとおもいます。

TAGS