H2O server-statusページへのアクセス制御

H2O 2.1以降からアクセス制御が大分簡単にかけるようになったので server-statusページに対して行った。

server-status.rbというファイルでACLを書いていく 404で返したかったのでdenyではなくrespondを使っています。

paths:
      /server-status:
        mruby.handler-file: /etc/h2o/mruby/server-status.rb
        status: ON
require "trie_addr.rb"
trie = TrieAddr.new.add(["許可するIP"])
acl {
    respond(404, {}, ["File Not Found"]) { path.start_with?("/server-status") && !trie.match?(addr) }
 }

参考 Access Control - Configure - H2O H2O x mrubyで人はどれだけ幸せになれるのか