nginxでrandom使いたい事って無いですか?
僕の場合は、表面上のURLはそのままにrewriteでAB testしたいという要件があり、nginxでrandomを使えないか調べてみました。
標準じゃないModuleならある
標準じゃないModuleなら、randomを使う方法があります。
http://wiki.nginx.org/HttpSetMiscModule#set_random
素直にこれを使えばいいのですが、できればyumとかのパッケージ管理から外れるのが嫌で標準のnginxでconfigで頑張れないか試してみました
標準インストールのnginxでrandomっぽい事をするconfig
いろいろ調べてみましたが、どうしても発見できず。
標準のModuleだと、randomって無いんですよね。(「おぃおぃ!あるよ!」という突っ込み歓迎)
そこで発想を変えて「configで取得できる値でrandomっぽい値を取得できるものをベースにしたら行けるんじゃないか」と思い、探してみたところ。。。
ありました。クライアント側のIPアドレス。
これをうまく使ってゴニョゴニョすればrandomっぽい感じに出来る(はず)。しかも、クライアントのIPが変わらない間は同じ値を生成できる。まさに僕の要件(AB test)にはピッタリでした。
set $ab "a";
if ($http_remote_addr ~* [0|2|4|6|8]$) {
set $ab "b";
}
これで50%の確率でaとbに振り分ける事が出来ます。
if文の所を工夫すればもう少し幅広い用途に使えそうです。
*もっとうまい方法を知ってるor思いついた方いたらぜひ教えて下さい(><)