Jetpack 利用環境で「アウトバウンド HTTPS が作動していません」と表示された場合の対処例

概要

WordPress で Jetpack プラグインを利用している環境において、”アウトバウンド HTTPS が作動していません”, “token_http_request_failed”, “Jetpack: [token_http_request_failed] cURL error 28”, “Resolving timed out after x milliseconds” のようなエラーが発生した場合の対処方法の一例を説明します。

問題

Jetpack は wordpress.com と連携することで、画像の高速化であったり、複数サイトの一元管理、Pub(連携済み SNS サービスへ記事の自動投稿)などができる便利なプラグインです。

01. エラーの詳細

01. エラーの詳細

しかし、いくつかのプラグインと併用している場合に、wordpress.com サイトとの連携がうまくいかなかったり、上記のように連携済みの状態が外れてしまうことがあります。

02. アウトバウンド HTTPS が作動していません

02. アウトバウンド HTTPS が作動していません

原因

私の場合は、Cloudflare を併用しているのでこれが原因であったようです。Jetpack の公式サイトに Use Jetpack and Cloudflare on your WordPress site のようなエントリがあり、Cloudflare との併用にあたっての設定方法が記載されているためこの手順を日本語訳しつつ備忘録として対応方法を記載します。

対策

公式見解では、2 つの条件を満たす必要があり、和訳(意訳です)してみると以下のような内容です。っていうか、以前は問題なく連携できていたのに、勝手に変えないでほしいんですけどw

※ 私のように焦って連携解除やプラグインのインストールしなおしをすると、この新しい連携縛りに陥りますので対処を検討している間、連携できなくなってしまいます。。
上記のエラーが表示されようが微動だにせず、冷静にトラブルシュートをおこない、原因と対策を明確にしてから行動するという方なら大丈夫かと思います。

で、最近になって、この問題が発生していなかったサイトでも事象が発生し始めたことや、Jetpack プラグイン自体のバージョンアップがあったことや、公式サイトの手順からリンクされているサポート記事の更新日時が、April 28, 2017 22:51 となっているのでおそらくその前後で変更が発生したものと私は推察しています。

Cloudflare の Page Rules を設定する

  1. Cloudflare のダッシュボードにある Page Rules を開く
  2. Add New Rule に以下のように入力する:
  3. *yoursite.com/wp-admin*

    03. ルールの追加

    03. ルールの追加

  4. caching, apps,および performance が無効となっていることを確認する
  5. Save and Deploy ボタンをクリックして設定を反映する

Cloudflare の SSL 証明書を利用する

  1. Cloudflare のダッシュボードにある Crypt で Cloudflare’s SSL オプションを有効にする
  2. 設定変更が反映されるまでしばらく待つ
  3. ※以下のように、ACTIVE CERTIFICATE と表示されていれば OK です。

    04. Cloulflare's SSL の有効化

    04. Cloulflare’s SSL の有効化

  4. ( WordPress 側で ) Cloudflare プラグインをインストールし有効化する
  5. ( WordPress 側で ) Cloudflare Flexible SSL プラグインををインストールし有効化する
  6. ※ダッシュボードのリダイレクトループを回避するため

  7. wp-config.php に以下の行を追記し、管理画面での SSL 通信 ( Administration over SSL ) を有効にする
  8. 管理画面での SSL 通信 ( Administration over SSL )

    /**
     * Admin over SSL
     */
    define('FORCE_SSL_ADMIN', true);
    
  9. wp-config.php の $_SERVER[‘SERVER_PORT’] にポート 443 を設定する
  10. /**
     * Set port to 443
     */
    $_SERVER['SERVER_PORT'] = 443;
    
  11. [設定]-[一般]にある、WordPress アドレス (URL) とサイトアドレス (URL) の両方を https にする
  12. 05. WordPress アドレスとサイトアドレスを HTTPS にする

    05. WordPress アドレスとサイトアドレスを HTTPS にする

  13. Cloudflare の設定で、すべてのトラフィック HTTP から HTTPS にする Page Rule を作成する
  14. 06. HTTPS の強制化 Page Rule 設定

    06. HTTPS の強制化 Page Rule 設定

度重なる脆弱性の指摘があったことから、SSL 自体に全幅の信頼を置かないことにしているものの、管理画面を保護する意味でもよりセキュアな設定であると言えます。301リダイレクトする方法も併せて実施しておくと良いですね。

nginx 利用時の補足説明

Cloudflare Flexible SSL では、サイト訪問者と Cloudflare 間のみ SSL 通信で、Cloudflare と Web サーバ間は HTTP になる。そのため、Web サーバ側では SSL 証明書の用意をする必要がなく、nginx の場合以下のように listen ポートとして 443 を追加しておくだけで Cloudflare Flexible SSL を利用できる。要は、単純に tcp/80 と tcp/443 で HTTP 通信を行うという意味です。

server {
  listen 80;
  listen 443 ssl http2;
  server_name xn--u9j9000ak6f.club;
  ...
}

トラブルシューティング

Cloudflare の Page Rules は有料では?

数によります。Cloudflare のサービスでは、本来 Page Rules の追加は有償のメニューですが、無料でも 3 つまで設定ができます。このあたりとても親切。

07. Cloudflare の Page Rule は 3 つまで無料

07. Cloudflare の Page Rule は 3 つまで無料

nginx で default_server にリダイレクトされる

nginx では単純に listen 443; としただけでも http サーバとして動作するが、バーチャルホストで複数ドメインについて SSL 接続している環境だと、default_server に指定したドメインへリダイレクトされてしまう。しかし、Flexible SSL の場合 80 番ポートあてにリクエストが来るので、server ディレクティブで listen 80; かつ SNI を利用するため、listen 443 ssl http2; のように指定する必要があった。

証明書は利用していないが、バーチャルホストなので普通に SSL 接続すると default_server のドメインにリダイレクトされるので苦肉の策ではある。

スポンサーリンク