さくらのレンタルサーバーでSSL(SNI)を導入しwww有りに正規化したら BackWPup が動かなくなってしまった時の対処法

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

タイトルがかなり長くて訳わからないですね。(笑)
順を追って書くと長くなりますので、先に答えだけ書いておきます。
(うーん、このブログでは技術系Tipsはヤメとこうと思っていたのですが、自分が運用しているサイトで「さくらのレンタルサーバー」を使用しているのはここだけですのでしょうがないですね。初手がTipsとか嫌だなぁ・・・。)



解決策

エラーの原因

wp-cron.php へのアクセスに際しリダイレクトが発生し301ステータスコードを返すため、処理がストップする。

対処法

wp-cron.php をリダイレクトの対象から外す。

具体的な方法

htaccess を以下のようにします。3行目の RewriteCond %{REQUEST_URI} !^/wordpress/wp-cron.php$ の部分がキモ。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/wordpress/wp-cron.php$
RewriteCond %{HTTP_HOST} ^[ドメイン名]\.com$ [OR,NC]
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://www.[ドメイン名].com/$1 [R=301,L]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

導入にあたっては、wp-cron.php のパスを実態に合わせて変更して下さい。
もちろん、ドメイン名などの部分も実態に合わせて下さい。

発生したエラーと経緯

前後してしまいましたが、順を追って説明します。

さくらのレンタルサーバー (スタンダード)におけるSSL

さくらのレンタルサーバーでは、最近SNIベースのSSLが利用できるようになりました。ところが少々癖がある設定で、https(:443)へアクセスするとhttp(:80)へのプロクシとして動作するためサーバーそのものがアクセス元になってしまうとのことです。この状態で、htaccessでwww付きの正規化を行うと、80(リダイレクト)▶443(プロクシ)▶80 というループにハマるようです。

で、回避策として参考にしたのが、「さくらでURL正規化を正しく行うSSLの設定方法 – はるかのひとりごと」こちらの記事。

この通りにやるとちゃんと動くのですが BackWPup が上手く動きません。

BackWPup のエラー

BackWPup の エラー表示 (Information タブ)

Server self connect:    The HTTP response test get a false http status (301)Missing or not expected HTTP response headers:
date: Thu, 25 Feb 2016 04:57:45 GMT
server: Apache/2.2.31
location: https://www.yomuna.com/wordpress/wp-cron.php?[パラメータ省略]&backwpup_run=test
content-type: text/html; charset=iso-8859-1
connection: close

wp-cron.php をテストで動かしてみたら、想定外の http ステータス(301) が返ってきたので接続切るから!」 ということですね。
てなわけで、wp-cron.php などをそもそもリダイレクトさせないようにしようということで、冒頭の一行を追加したわけです。

修正後の BackWPup の Information タブにおける表示

Server self connect:    Response Test O.K.

はい!うまく行きました。
夜間バックアップも自動で行われていましたよ!

おまけ

ついでと言ってはなんですが、wp-admin におく htaccess もご参考まで。
なお、この例では、htpasswdファイルを公開ディレクトリ(www)の上の階層に置いています。

AuthUserFile /home/[ユーザーID]/.htpasswd
AuthType Basic
AuthName "Web access"
Require valid-user
Order deny,allow

<FilesMatch "(async-upload\.php|admin-ajax\.php)$">
Satisfy any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>

wp-admin ディレクトリにBasic認証をかけるんだけど、async-upload.phpadmin-ajax.phpは認証無しでアクセスできますよ!っていう設定ですね。

なお、ご利用は各自の責任で!

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る


コメント

  1. akap より:

    ありがとうございます。

    私も知り合いのHPで、さくらのレンタルサーバーを使用していまして、1ヶ月ほど前からSNI SSLで常時SSL化をしていました。
    ところがメール投稿(Ktai Entryを使用していましたがPostieに変更しました)が機能しなくなって困っていました(手動でメールを受信させればいいのですが面倒です)。
    他のプラグインとの相性かと思い、いろいろやりましたが原因がわからず悩んでいました。
    wp-cronに原因があるようなことは分かってきたのですが、根本の原因がわからずにいました。
    たまたまこのページに検索が引っかかりまして、もしやと思いやってみたところ見事に直りました。
    常時SSL化するのにReally Simple SSLというプラグインを使用していたので、これが原因かと思い、作者にメール(拙い英語で)問い合わせたりして迷惑をかけてしまいました。

    貴重な情報をありがとうございます。

コメントを残す