nginxでFeedBurnerのクローラーだけ受け入れる方法

つい先日、このブログ(WordPress)をようやくApache無し、nginxだけで動かすことに成功しました。わーい。ところが今日、ふと変なことに気づいた。RSSが更新されていない・・・。

このブログのRSSはFeedBurnerに流していました。なので、一般の方がRSSを見た場合はFeedBurnerを見に行くようにしていたんです。

今回Apacheからnginxにリプレースした際も、RSSを見に来た人をFeedBurnerにリダイレクトさせる(飛ばす)ようにしました。

・・・が。
これじゃFeedBurnerさんは更新情報を取れないですな。クローラーもFeedBurnerに飛ばされちゃうんだものw

というわけで本題。今回は下記のように設定します。

  • 一般ユーザーがWordPressのRSS( http://zafiel.wingall.com/feed )を見た場合はFeedBurnerに移動するようにします。
  • FeedBurnerのクローラーだけはRSSを読めるようにします。

やることは簡単。訪問者のユーザーエージェントを見て識別します。
FeedBurnerのユーザーエージェントは「FeedBurner/1.0」らしい。なので、プロキシのserver部分に判別処理を書きます。

[shell title="nginx.conf"]
(前半省略)
server {
    listen       80;
    server_name  zafiel.wingall.com;

    # /feed 以下のアクセスを処理
    location /feed {
        # FeedburnerのクローラーはWebサーバーに流す
        if ($http_user_agent ~ ^FeedBurner) {
            proxy_pass http://127.0.0.1:8000/;
            break;
        }

        # 他はFeedBurnerにリダイレクト
        rewrite ^(.*) http://feeds.feedburner.com/azrael last;
        break;
    }
(以下省略)
[/shell]

こんな感じ。参考にどうぞ(・∀・)!

1件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください