かまたま日記3

プログラミングメイン、たまに日常

ngx_mrubyでメンテナンス画面表示を自動化する

  • 自らのホスト名の名前を持つフラグファイルの存在(中身は空)をチェックし、503とメンテナンス画面を返すためのnginxの設定
  • 特定のremote_ip(オフィスネットワークを想定)だったらメンテナンス画面は出さない仕組みもついでに
  • パフォーマンスはベンチ取ってないので不明
mruby_set_code $under_maintenance '
  c = Nginx::Connection.new
  r = Nginx::Request.new
  allowed_networks = "xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy"

  File.exists?("/var/tmp/maintenance/#{r.var.host}") && !allowed_networks.include?(c.remote_ip)
';

if ($under_maintenance = "true") {
  error_page 503 /__error/maintenance.html;
  return 503;
}

参考文献

ngx_mrubyを使って特定ホスト以外からのアクセスをメンテナンス画面にする - lamanotrama's diary