Subscribed unsubscribe Subscribe Subscribe

Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

久保達彦・道井俊介『nginx実践入門』

読んだ

福岡出張にいっていたら、ちょうど福岡にいらしていた@kazeburoさん経由でご恵贈いただきました。ありがとうございます。

nginx実践入門 (WEB+DB PRESS plus)

nginx実践入門 (WEB+DB PRESS plus)

本書は、nginx関連で多数のプロダクトを作っている@cubicdaiyaさんと、pixivのインフラを支える@harukasanさんによる共著とあってみれば自然と期待が高まるわけですが、nginxのアーキテクチャについての簡潔な説明から、基本的な設定や大規模なコンテンツをさばくためのスケールアウトの方法、さらにはngx_luaによる拡張まで、Webサービスにおけるnginxの実践的活用に必要な内容が、わかりやすく述べられています。

秒間50kリクエストを捌くノウハウがこの1冊に!nginx実践入門 - pixiv inside」にもある通り、著者らの日々の実践から得られた知見が惜しみなく披露されていて、僕自身はnginxの設定を書くことはいまはあまりないけれども、あの時知っていたらあんなに苦労しなかっただろうなあと強く思ったのだし、ともあれ現状のWebサービスにおいてnginxは欠かすべからざるソフトウェアなのですから、本書は今後もおおいに役立つでしょう。

第3章「基本設定」では、(1)HTTPサーバに関する設定、(2)nginx本体の設定、(3)パフォーマンスに影響する設定の3つに分類して、膨大なディレクティブを、まずは必須のものから紹介しています。その他の、たとえばlocationrewriteディレクティブについては第4章「静的なWebサイトの構築」で説明されますし、HTTPS通信に関する設定については第5章「安全かつ高速なHTTPSサーバの構築」において、安全性をどう担保するかという詳述込みで説明されています。

ある程度の規模のものはどれもそうだと思いますが、リファレンスを読むだけではどうにも全体観がつかめなくて、個別の設定の意味がよくわからなかったり、ある要求に対する解決がnginxによって可能なのかがすぐには判断できなかったりします。nginxの膨大な設定ディレクティブも、そのようなもののひとつでしょう。そこに、適切な分量でユースケースに沿って説明がされていることで、読み進めるうちに自然とnginxの全体観が得られる構成になっています。

また、nginxはいろいろなことができる反面、ハマりどころも多いように思えます。本書は、そのあたりについても実践的で、たとえばp.66で解説されるlocationディレクティブのマッチ順や、p.147で解説される「rewriteとtry_filesディレクティブの挙動」のあたりは、自分自身、かつてハマった記憶がありましたし、特に前者などは大いに問題になり得るものであるため、必ず押さえておくべき内容でしょう(詳しくは是非本書を買ってご覧ください)。

nginxのアーキテクチャについては、もう少し深掘りして解説がほしいと思いはしましたが、実践的な活用という意味では、まずはこのぐらいは知っておきましょうというレベルにとどめたのかもしれません。そのような実践的なバックグラウンドを提供する解説としては、第6章「Webアプリケーションサーバの構築」において、2回にわたって語られる「リバースプロキシによるリクエストのバッファリング効果」も有用です。「そもそもなんでnginxをフロントにおくんだっけ?」と思っているひともいるかもしれません。当該箇所をご参照ください。

本書はngx_luaによるnginxのプログラマブルな拡張が詳述されていますが、個人的にはngx_mrubyを使う機会が多いのであまり役立たないかなと思いきや、p.229に掲載されているnginxのリクエスト処理フェーズは、あやふやな理解をより正確なものにしてくれましたし、ngx_lua自体のリファレンスをひと通り眺めることで、こんなこともできるんだなあと感心したりもしたのでした。

そんなわけで、ふだんからnginxを使っているインフラエンジニアはもちろん、これから触り始めるひと、はたまたngx_luaやngx_mrubyでWebサーバを拡張しようと思っているアプリケーション開発者にとっても、非常に有用な本であると思いました。

nginx実践入門 (WEB+DB PRESS plus)

nginx実践入門 (WEB+DB PRESS plus)

  • 第1章 nginxの概要とアーキテクチャ
  • 第2章 インストールと起動
  • 第3章 基本設定
  • 第4章 静的なWebサイトの構築
  • 第5章 安全かつ高速なHTTPSサーバの構築
  • 第6章 Webアプリケーションサーバの構築
  • 第7章 大規模コンテンツ配信サーバの構築
  • 第8章 Webサーバの運用とメトリクスモニタリング
  • 第9章 Luaによるnginxの拡張―Embed Lua into nginx
  • 第10章 OpenRest―nginxベースのWebアプリケーションフレームワーク