2013年10月22日火曜日

nginx plus::statusモジュールを作る#1

nginxの商用版nginx plusには魅力的な機能がありますが、個人利用ではお値段高め。
awsでインストール済みのイメージがある様なのでそれを使用してみるのも一つの手ではある。

もう一つの手として公開されている仕様を元に自作でモジュールを作ってしまう。

作ったものを公開するところまでやってみようと思った。

先ずはstatusモジュールから挑戦。

仕様は概ねこれをパクる。


雛形を作る

apacheの場合apxsで雛形が作れるのだけどnginxの場合は特に標準で用意されてなく、こういうのを作成している人が居たので使わせて頂く。
モジュール名はngx_http_json_status_module とする。
sudo gem install ngxmodgen
mkdir ngx_http_json_status_module
cd ngx_http_json_status_module
ngxmodgen -n json_status
tree
.
├── config
└── ngx_http_json_status_module.c

0 directories, 2 files

ディレクティブの設定

引数は取らないでlocation内にstatus;を記述すれば有効になるようにする。
ngx_http_json_status_module.cを編集。
static char *ngx_http_json_status(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
...
static ngx_command_t
ngx_http_json_status_commands[] = {
  {
    ngx_string("status"),
    NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
    ngx_http_json_status,
    0,
    0,
    NULL
  },
  ngx_null_command
};
仮にstatus on|off; で切り替えたい場合は以下の様にする。
static char *ngx_http_json_status(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
...
static ngx_command_t
ngx_http_json_status_commands[] = {
  {
    ngx_string("status"),
    NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
    ngx_http_json_status,
    0,
    0,
    NULL
  },
  ngx_null_command
};

#2に続く

0 件のコメント:

コメントを投稿