WordPress本体やプラグインの最新版の更新通知がこないとき

2013年8月2日

お久しぶりでございますサトでございます生きてます(;´Д`)
完っっ全に失速してますね。精神じゃなくて体調的にダウンしてた時期ありましたしね。
ちょっとこれからはゆるゆる更新になりそう…。

いつもテストしていた実験用WordPressではありませんが、運用を開始して結構経つWordPressサイトでぶつかった問題に頭を悩ませていたのでメモっときます。

WordPressの最新版の通知がこない

運用管理にほとんど関わっていなかったWordPressサイトに久しぶりに入らせてもらったら、ダッシュボードがなんかおかしい。


(画像はクリックで拡大します)
  • 7月31日現在、WordPressの最新版として3.5.2がリリースされているにも関わらず、3.5.1のWordPressに更新のお知らせが来ていない。
  • WordPressフォーラムやブログの最新投稿が表示されない。被リンク検索もできていない。
  • プラグインの検索や新規追加ができない。
ダッシュボードのRSSエラーの文言はこんな感じ。
RSS エラー: WP HTTP Error: Couldn't resolve host 'ja.wordpress.org'
RSS エラー: WP HTTP Error: Couldn't resolve host 'ja.forums.wordpress.org'
RSS エラー: WP HTTP Error: Couldn't resolve host 'blogsearch.google.com'
WordPress.orgにアクセスできてない。

FTPソフトからファイルのアップロードは問題なくできるので、最悪FTPからWordPressのバージョンアップやプラグイン追加はできますが、そんなの効率悪いじゃないですか。そもそも「アップグレードしてね」のお知らせがきてくれないと最新版がリリースされたことに気付かないし。

名前解決ができてなかった

いつからこうなってた?何したらこうなったの??
自分で管理しているサイトではなかったので、原因を調べるのが大変でした(_Д_)アウアウアー
3.5.1にアップグレードしたときはダッシュボードから行った、ということなので、その頃は問題なく使えていたはず。その後何かのタイミングでおかしくなってしまったっぽい。
1人では限界だったので、ここから先は詳しい方に調査協力を依頼。

実はこのサーバー、最後にWordPressのバージョンアップをした後にサーバー移転をしているのですが、その影響で名前解決ができていなかったようです。

resolv.confの設定を見直す

resolv.confというファイルの存在、私も初めて知ったのですが。
$ cat /etc/resolv.conf
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx
etcの中のresolv.confファイルに書かれているこの2行は、参照するDNSサーバーを指定するものです。
Osukiniサーバーは初期でこの情報が設定されているので特にいじる必要はないのですが、今回エラーを起こしていたWordPressは独自にサーバーを引っ越しさせていたため、自分でこの設定を変更する必要がありました。それができていなかったので、名前解決をすることができず、WordPress公式からの通知がこなくなってしまっていました。

さっそく設定を変更し、apacheを再起動。
数分後に無事WordPress本体やプラグインの更新通知がきました!


WordPressのフォーラムなどのRSS取得はすぐには反映されず、翌日見てみたら直ってました。Googleにもアクセスできたので被リンクの表示も正常。


DNSサーバーの種類

エラー自体は詳しい方の協力で比較的サクッと解決したのですが、そもそもサト自身がresolv.confやDNSについてよく分かっていなかったので、初心者レベルの自分でもわかるように自分なりに書き直しておさらい。

DNSキャッシュサーバーと権威DNSサーバー

DNSの説明は日本レジストリサービス(JPRS)のコラムページがわかりやすいです。一部抜粋すると…

すなわちDNSでは、
①階層構造を順にたどり、名前解決を行うサーバ
②階層構造を構成し、名前情報を管理するサーバ

の、異なった機能を持つ2種類の「DNSサーバ」が存在することになります。

DNSでは①のサーバを「DNSリゾルバ(DNS resolver)」と呼びます。DNSリゾルバは名前解決の際に得られた名前情報をキャッシュする機能を備えていることから、「DNSキャッシュサーバ(DNS cache server)」と呼ぶことが一般的です。
また、②のサーバを、それぞれのドメイン名に対する管理権限(オーソリティ)を持つことから、「権威DNSサーバ(authoritative DNS server)」と呼びます。

参照: No.10 DNSのしくみと動作原理~インターネットを支え続けるDNS~ (PDF)


WEBサイトを閲覧するとき

例えばSaaSesのWEBサイトを見たいとき。サトの下手くそな図で説明すると…

saases.jpというURLは人間には覚えやすいですが、コンピュータはこのアドレスがどこを指しているのか理解できません。なので理解できるIPアドレスを取得する必要があります。
  1. ブラウザのURL欄に「saases.jp」と入力する
  2. ブラウザはリゾルバ(ルーターがこの機能を持っていることが多い)に「saases.jp」のIPアドレスを調べてくるように依頼する
  3. リゾルバはルートサーバーに「saases.jp」の場所を問い合わせる
    ⇒jpドメインを管理するDNSサーバーに聞くよう指示される
  4. リゾルバはjpドメインのDNSサーバーに「saases.jp」の場所を問い合わせる
    ⇒saases.jpのドメインを管理するDNSサーバーに聞くよう指示される
  5. リゾルバはsaases.jpドメインを管理するDNSサーバーに「saases.jp」のIPアドレスを問い合わせて取得する
  6. リゾルバはブラウザに「saases.jp」のIPアドレスを知らせる
  7. ブラウザにSaaSesのサイトが表示される
これが、WEBサイトを閲覧するまでの流れ。

サーバーからリクエストするとき

今度はサーバー側がリクエストするときの流れを見てみましょう。例えば今回のようにWordPressの最新版が出ていないか、自分のサーバーがWordPressの公式サイトに問い合わせをするとき。
  1. SaaSesWEBサイトのサーバーにあるetc/resolv.confファイルを参照する
  2. resolv.confで設定されたリゾルバに「wordpress.org」のIPアドレスを調べてくるように依頼する
  3. リゾルバはルートサーバーに「wordpress.org」の場所を問い合わせる
    ⇒orgドメインを管理するDNSサーバーに聞くよう指示される
  4. リゾルバはorgドメインのDNSサーバーに「wordpress.org」の場所を問い合わせる
    ⇒wordpress.orgのドメインを管理するDNSサーバーに聞くよう指示される
  5. リゾルバはwordpress.orgドメインを管理するDNSサーバーに「wordpress.org」のIPアドレスを問い合わせて取得する
  6. リゾルバはSaaSesWEBサイトのサーバーに「wordpress.org」のIPアドレスを知らせる
  7. SaaSesWEBサイトのサーバーはWordPressの公式サイトで最新情報を取得する
ブラウザにWEBサイトを表示させるときとほぼ同じなのですが、リゾルバとなるサーバーはresolv.confで設定されています。ここが正しく設定されていれば、リゾルバは依頼をちゃんと受け取ってくれて、問い合わせを開始してくれます。設定を誤って別のリゾルバが指定されていた場合、このリゾルバはSaaSesWEBサイトのサーバーの依頼を拒否してしまうため、名前解決ができません。

今回事件が起こったWordPressは、サイト自体は正常に表示されているけれど、管理画面からWordPressの最新情報を取得することができていませんでした。
それは、一般ユーザーがWEBサイトを見るときは自分のルーターが名前解決を行ってIPアドレスを取得し、そのWordPressサイトを問題なく表示させていたから。内部ではリゾルバの設定が間違っていたため、問い合わせをすることができず、プラグインの検索や最新バージョンのWordPressが取得できていなかったのです。

外からは問題ないのに中からはおかしい、この理由を理解するのに時間がかかったサト。
KさんTさん、そしてシノブ氏、忙しいのに質問攻めにしてごめんよ。

——————–

エラー対処してたのが昨日一昨日で、今日この記事を書いている最中に最新版のWordPress3.6リリースの通知がきました(笑)
WordPress › 日本語 « WordPress 3.6 “Oscar”
日本語版はまだのようですけどね。楽しみ楽しみ。

お盆まであと10日ほどですが(学生は夏休みか…いいな…)、みなさんサトのように夏バテしないように気をつけて!それではまたヾ(´∀`○人●´∀`)ノ