WordPressのプラグインで認証付きダウンローダー

S3に入れて置いたデータをwordpressのプラグインで認証付きのダウンローダを作れないかとの検討

プラグインは便利なので、Wordpressにログインした人のみがダウンロードできるようにしたい

こんな感じでできました

環境

    • s3にファイルを格納しておく
      wordpressはec2
      プラグインはショートコードでWordpressの固定ページなどに埋め込む
  • 仕様

    • img: S3のファイルパス
    • token: wordpressのセッションID
    • userid: wordpressのログインID(ログイン名ではなくWordpress内部でのログイン番号)

    データ

    以下に格納しておく
    s3://example/dir/file.png

    ショートコード

    固定ページをhttp://example.com/downloaderで作成し、以下を埋め込む

    プラグイン

    sample_downloaderディレクトリ以下にmain.phpで作成

    Apache+mod_mem_cacheでキャッシュしてみる

    Squidを使えば簡単にリバースプロキシを作ることができます。ただ、一つ問題がありキャッシュ時間が分単位となります。

    リアルタイム性をできるだけ持たしたいのだが、数秒間のキャッシュを行いたいときにはSquidではちょっとできそうにありません。そこでApache+mod_mem_cacheで試してみます

    参考にしたページ

    1. http://httpd.apache.org/docs/2.2/mod/mod_cache.html
    2. http://d.hatena.ne.jp/mhag/20070417/1176786290
    3. http://blog.as-is.net/2007/02/mt-searchcgi-modcache.html
    4. http://kamoland.com/wiki/wiki.cgi?mod_cache%A4%C7Wiki%28CGI%29%A4%CE%B9%E2%C2%AE%B2%BD
    5. http://d.hatena.ne.jp/rougeref/20090616

    Apache2.2.22インストール

    httpd.confをこんな感じで設定します設定します。

    どうやらmod_mem_cacheはメモリ上のキャッシュが変に効いているので最初はいいがそのうちダメになるので、mod_disk_cacheをつかいます

    今回はJSPとperlのCGIを対象にしますので、mod_perlも設定しておきます

    Perl

    これらの設定でJSPは簡単にキャッシュが効いてくれたのですがどうもcgiはうまくキャッシュされていない模様です。

    どうもHTTPHeaderにExpiresとCache-Control:max-ageがうまく入っていなかったようですのでcgi側で強制的に入れてやります

    結局のところ

    apacheの設定

    mod_disk_cacheを使うのが吉。

    その場合、CacheDirをクローンで定期的に消す必要あり

    cgiの設定

    たぶん不要だがmod_perlを使うようにする

    perlの書き方

    HeaderにExpires:5 と Cache-Control: max-age=5 を入れておく

    なぜか勝手にApacheがmax-age=0を返していたのでこれは必須