cybozu.com のリバースプロキシを nginx にリプレイス

こんにちは。インフラチーム Hazama の深谷です。

デブサミ 2015 で、cybozu.com の自社製リバースプロキシを全面的に再実装した話をしてきました。 今回は、そちらの資料を紹介いたします。

cybozu.com ではお客様ごとに異なるサブドメイン(ex. demo.cybozu.com)を用意しています。サブドメイン方式には、お客様ごとに異なる IP アドレス制限をかけられるとか、Same-Origin-Policy のため安全に JavaScript でカスタマイズができるといった利点があります。

このサブドメインを実現しているのは、従来 Apache で実装されたリバースプロキシでした。しかし、この時の実装はサブドメインごとに異なる VirtualHost を定義する方式で、お客様サブドメインの数に比例して Apache の設定を変更する時間が伸びていくというものでした。

設定の反映は、新規お申込時や、お客様サブドメインへの契約アプリケーションの追加・削除、セキュリティ設定の変更で起こります。そのため、反映時間が伸びるとユーザー体験に大きな影響が現れます。昨年の段階で5分以上になってしまったため、仕組みの改善にとりかかりました。

Apache に代えて nginx と Lua で抜本的に仕組みを変えた結果、設定の反映に必要な時間はサブドメインがいくら増えても1秒前後になりました。発表では、これを実際にどのように実現していくのかを紹介しました。

資料について

発表資料には、nginx や Lua の設定のエッセンスやコード片、 適用してみて得られた知見など記載しているのでぜひご覧ください

その他

資料にある SSL セッションキャッシュの複数サーバ間の共有や、DoS 対策モジュールについて、当ブログで後日解説する予定です。オープンソース化も予定していますので、ご期待ください。