備忘のため残しておく。
前提
- さくらのレンタルサーバー上でWordpressをインストールして利用している
- インストール先パスは~/www/blog
- 最初インストールしたときには(いま確認したら2013年! 10年も前か!)http://www.sasaboushi.net/blogをアドレスとしていた
- その後、いつだったか忘れたけど常時SSL化を行った。設定を自動でやってくれるSAKURA RS WP SSLのプラグインを利用していた。これも結構昔なのでプラグインを使う以外に何をやったかの記憶はない(後述するが、このときwp-config.phpを書いた可能性がある)
- Jetpack連携を利用していた
事象
去年、ブログをリニューアルしたが、そのときにWordpressのテーマを変えたとか以外に主に2つのことを実施した。
まず1つは、ずっと邪魔だなと思っていたwwwを外そうとした(つまり、www.sasaboushi.net/blog を、sasaboushi.net/blogにした。どっちでもいいのだが、なんか同人誌の奥付とかに書くときに長いなと思って年一回程度の周期で気になっていた)。そのために施した具体的な設定を忘れてしまった(というのがあって次に何かするときに覚えておけるようにこれ書いてるんだけど……)のだが、多分以下の2点だった気がする。
- .htaccessで、www付きをwww無しにリダイレクトした
- WordPress設定画面の「WordPress アドレス (URL)」「サイトアドレス (URL)」をwww無しにした
もう1つは、FreeBSDのアップデート(新サーバーへの移行)を手動で申し込んで実施した。
するとその後、Jetpack連携が微妙におかしくなった。微妙にというのがくせ者で、具体的には、
- WordPressのサイトヘルス画面で「改善が必要」「致命的な問題」として、Wpcom Connection Testが失敗した状態になる
- WordPress.com画面では、エクスクラメーションマークがついて、サイトに接続できていないことになっている
- しかしながら、統計情報はきちんととられていて、アクセス数なども見えている
- WordPressのモバイルアプリ(途中からJetpackのモバイルアプリに切り替わった)でも、統計情報は見えているし、サイトが落ちているとアラートもあがる。しかしながら、モバイルアプリで投稿を確認したりすることができない
- WordPressのサイトヘルスから促されるリンクを踏んでJetpackを再接続すると、接続に成功したような画面になるのだが、サイトヘルスは黄色いままで事象は改善されない
自分の場合、Jetpackを入れて一番使っているのは統計情報の確認で、モバイルアプリで記事を更新したりすることもないので、正直そんなに困らない状況だった。サイトヘルスが毎回黄色いのは気に入らないのだけれど、この微妙な困らなさ具合によって半年以上放置していた。
が、ふと思い立って重い腰を上げて確認したら、直し方に気づくことができた。
解決
wp-config.phpの冒頭にあった以下の記述を削除したところ、事象が改善した。
if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
$_SERVER['HTTP_HOST'] = 'www.sasaboushi.net';
$_SERVER['SERVER_NAME'] = 'www.sasaboushi.net';
$_ENV['HTTP_HOST'] = 'www.sasaboushi.net';
$_ENV['SERVER_NAME'] = 'www.sasaboushi.net';
}
考察
実際には前段階として、wp-config.phpを開いてみて上記の記述を発見した瞬間に、ここにwww残ってるじゃないかと思ってまず削除した。すなわち以下のようにした。
if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
$_SERVER['HTTP_HOST'] = 'sasaboushi.net';
$_SERVER['SERVER_NAME'] = 'sasaboushi.net';
$_ENV['HTTP_HOST'] = 'sasaboushi.net';
$_ENV['SERVER_NAME'] = 'sasaboushi.net';
}
そうすると、この時点で既に事象は改善していた。
しかし、その後調べていくと、HTTP_X_SAKURA_FORWARDED_FORという環境変数は前述したサーバー移行(FreeBSDのアップデート)の際に不具合を生む可能性があるので使わないことが推奨されていて、サポート対象外だと書かれていることを発見した(このページの最後の方)。
そのため、wp-config.phpの上記のブロック自体を削除した。削除しても動作は変わらないようだった。
今回の事象の直接的な原因は、おそらく、サイトURLからwwwを外したのにwp-config.phpの上記記述を見直さなかったことであり、FreeBSDのアップデートによってエラーが出たわけではなさそうに思える。しかし、HTTP_X_SAKURA_FORWARDED_FORを利用した設定自体が非推奨ということなので、この機会に消しておくことにした。(消しても問題ないことの理由はよくわかってない。まあいいじゃん、動いてるし……)
そもそも上記のブロックがどうしてwp-config.phpに書いてあったのかは定かではないのだが、検索すると古い個人ブログで常時SSL化の際に書き込むことを指南している記事がいくつかヒットする。自分が常時SSL化をした時点ではさくらインターネット側から案内されていた手順だったのかもしれない(が、さくらインターネット側はHTTP_X_SAKURA_FORWARDED_FORをサポート対象外にした時点でそのような案内をやめたから、いま見つからないのかもしれない)。
単にJetpackに接続がうまくいかないという事象は結構あるあるのようで、検索すると様々な対処法(.htaccessでxmlrpc.phpへのアクセスを通す、wp-config.phpで$_SERVER[‘SERVER_PORT’] = 80;を設定、さくらのレンタルサーバーの場合で国外IPアドレスをブロックしていないか、等等)が出てくるが、そのどれでもない、長くさくらのレンタルサーバーを使っている時にしかハマらないようなマイナーな解法なのかもしれないと思われるので、ここにメモを残しておく。