[WordPressメモ]CloudFlare使用でhttp経由でwp-cron.phpを呼び出しに失敗する件

P1070171

無料のCDN CloudFlareはホームページの高速化で便利なサービスですが、ハマりポイントも多いわけです。

Home | CloudFlare | The web performance & security company

WordPressを利用しているといろんな便利なプラグインがMovableTypeと違って簡単に手に入るので、色々使っている方も多いと思います。その中で私が現在試用しているWordPressの中に入れているのがBackWPupというプラグインが有ります。これはバックアップをしてくれるプラグインです。とっても便利です。指定時間にDBやファイルを全てバックアップしてメール or File or FTP or DropBoxなどに送ることができるのでいざというときに安心なわけです。

 

で、これを使っていると、ある日見るとバックアップが行われなく無くなっていたりします。スケジュール日付が1970年の1月1日とかに勝手になってたりします。

まあ、当然解決方法をググるわけですが、わからないわけです。

まあそれで、BackWPupは通常WP cronという疑似cronで動くわけですが、マニュアル操作やurlにアクセスすることで動かすこともできます。

じゃあ本物のcronでwgetやcurlでurlにアクセスすればいいじゃない!

ということになるわけです。

しかーし、curlでジョブを実行するurlにアクセスしても全くバックアップが開始されないわけです。

おかしいな~としばらくハマるわけです。

$ curl -I http://example.com/wp-cron.php?_nonce=hogehoge&backwpup_run=runext&jobid=1
$ HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Mon, 04 Nov 2013 01:23:09 GMT
Content-Type: text/html
Connection: keep-alive
Set-Cookie: __cfduid=hogehoge; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.example.com; HttpOnly
X-CF-Powered-By: WP 1.3.10
X-Powered-By: PHP/5.2.17
CF-RAY: hogehoge

で、ヘッダを見てピンと来たわけです。

あーこれ、CloudFlareにbot扱いされて弾かれてるんじゃね?

という考えに行き着くわけです。

wp-cron.php CloudFlareで検索すると、解決策が載っているサイトが見つかりました。英語のサイトですけど。

大抵こういう問題の解決策は日本語のサイトで見つかることが少ないので最初から英語のサイトを見に行ったほうがいいです。英語読めなくてもなんとかなると思います。

で、下記スレッドの一番最後にあるhttp://daif.net/script/cloudflare.phpsのソースコードをつかって呼びたいurlを呼んであげるとブロックされずにちゃんと呼び出してくれます。

php – curl: can't fetch rss from website because of CloudFlare – Stack Overflow

どういうことをやってるかを簡単に説明すると、ヘッダ偽装してFirefoxからポストしているように見せかけています。

ちなみにcurlの-AオプションでUserAgentを偽装しただけではダメでした。

タグ :