目次
- 本書に寄せて
 - はじめに
 - 各章の執筆者と初出一覧
 - 参考文献/URL
 - ディレクティブ書式の見方
 
第1章 nginxの概要とアーキテクチャ
- 1.1 nginxとは
- nginxの特徴
 - nginxの用途
 - [Column]そのほかのHTTPサーバ
 
 - 1.2 nginxのアーキテクチャ
- イベント駆動とは
 - HTTPサーバで発生するイベント
 - I/O処理の効率化
- I/O Multiplexing
 - ノンブロッキングI/O
 - 非同期I/O
 
 - nginxの実際の動作モデル
 
 - 1.3 まとめ
- [Column]nginxのコミュニティ
 - [Column]NGINX Plusとサポートサービス
 
 
第2章 インストールと起動
- 2.1 ソースコードからのインストール
- ビルド環境の構築
 - ソースコードの入手
 - インストール
 - [Column]Mainline版とStable版の違い
- インストールしたnginxの情報を確認
 - ファイルパスの指定
 - 依存ライブラリを静的に組み込む
 - PCREのJIT機能を利用するには
 
 - モジュールの組込み
 - サードパーティモジュールの組込み
 
 - 2.2 パッケージからのインストール
- Debian GNU/Linuxの場合
 - CentOSの場合
 - FreeBSDの場合
 
 - 2.3 nginxの起動,終了,基本的な操作
- nginxの起動
- nginxのプロセスが起動していることを確認
 - 80番ポートをbindしていることを確認
 
 - nginxの終了,設定の再読み込み
- nginxコマンドによる制御
 - killコマンドによるシグナルの送信
 
 - システムサービスとして実行
 
 - nginxの起動
 - 2.4 まとめ
 
第3章 基本設定
- 3.1 設定ファイルの構成
- 設定ファイルのフォーマット
 - ディレクティブ
- シンプルなディレクティブ
 - ブロック付きディレクティブとコンテキスト
 - パラメータの書式
 
 - 変数
 - 設定のインクルード
 
 - 3.2 HTTPサーバに関する設定
- HTTPコンテキストの定義
 - バーチャルサーバの定義
- 使用するアドレス,ポートの指定
 - ホスト名の指定
 - 複数のバーチャルサーバの優先順位
 
 - 公開するディレクトリを設定
 - MIMEタイプの指定
 - アクセスログの出力
- ログフォーマットの定義
 - ログファイルの出力先
 
 
 - 3.3 nginx本体の設定
- エラーログの出力設定
- error_logディレクティブ
 - バーチャルサーバ別のエラーログファイル指定
 - log_not_foundディレクティブ
 
 - プロセスの動作に関する設定
- pidディレクティブ
 - userディレクティブ
 - worker_processesディレクティブ
 - worker_rlimit_nofileディレクティブ
 - eventsディレクティブ
 
 
 - エラーログの出力設定
 - 3.4 パフォーマンスに影響する設定
- keepalive_timeoutディレクティブ
 - sendfileディレクティブ
 - tcp_nopushディレクティブ
 - open_file_cacheディレクティブ
 - worker_cpu_affinityディレクティブ
 - pcre_jitディレクティブ
 
 - 3.5 まとめ
 
第4章 静的なWebサイトの構築
- 4.1 静的コンテンツの公開
- 配信するファイルの指定
 - locationディレクティブの優先順位
- 前方一致のディレクティブを複数書いた場合
 - 前方一致を優先させる方法
 
 - locationディレクティブのネスト
 - 特定の条件で使用するファイル
- インデックスページの指定
 - インデックスページの自動生成
 - エラーページの指定
 
 
 - 4.2 アクセス制限の設定
- 接続元IPアドレスによる制限
- 特定のアドレスを拒否──ブラックリスト方式
 - 特定のアドレスを許可──ホワイトリスト方式
 - 複雑なアクセス制限
 
 - Basic認証による制限
- パスワードファイルの生成
 
 - 大量リクエストの制限
- 同時コネクション数の制限
 - 時間あたりリクエスト数の制限
 - nginxでは対応できないDoS攻撃
 
 
 - 接続元IPアドレスによる制限
 - 4.3 リクエストの書き換え
- 特定のステータスコード
- エラーページの表示
 - リダイレクト
 
 - リクエストURIの書き換え
- rewriteディレクティブへのフラグの指定
 - 不必要なrewriteディレクティブ
 
 - ifディレクティブとsetディレクティブによる複雑な処理
- ファイルの確認
 - 複雑な条件分岐
 - リファラによる条件分岐
 
 
 - 特定のステータスコード
 - 4.4 gzip圧縮転送
- 動的なgzip圧縮転送
- gzip_typesディレクティブ
 - gzip_min_lengthディレクティブ
 - gzip_disableディレクティブ
 
 - あらかじめ用意した圧縮ファイルを転送
- gzip圧縮転送が無効な場合の動的な解凍処理
 
 
 - 動的なgzip圧縮転送
 - 4.5 まとめ
 
第5章 安全かつ高速なHTTPSサーバの構築
- 5.1 なぜHTTPS通信が必要なのか
 - 5.2 必要なモジュールと最低限の設定
- TLSの有効化
 - TLS証明書と鍵ファイルの指定
 
 - 5.3 安全なHTTPS通信を提供するために
- OpenSSLのバージョンを確認
 - SSLv3を無効化
 - 暗号化スイートを明示的に指定
- 暗号化スイートリストの指定
 - サーバの暗号化スイートの設定を優先
 
 - DHパラメータファイルを指定
 - SHA-2(SHA-256)サーバ証明書を利用
 
 - 5.4 TTFBの最小化によるHTTPS通信の最適化
- HTTP/2による通信の高速化
 - SPDYによる通信の高速化
 - TLSセッション再開による高速化
- セッションキャッシュの利用
 - セッションチケットの利用
 - セッションチケットを利用した状態でPFSの条件を満たすには
 
 - OCSPステープリングによる高速化
- OCSPステープリングの設定
 - OCSP問い合わせ結果をサーバで検証
 
 - TLSセッション再開とOCSPステープリングの確認
 - セッションキャッシュを確認
 - バッファサイズの最適化
 
 - 5.5 複数ドメインを1台のサーバで運用するには
- SNIの使用
 - ワイルドカード証明書やSANオプションによる設定
 - 証明書ごとに異なるIPアドレスの割り当て
 
 - 5.6 まとめ
- [Column]HSTSを用いて常にHTTPS通信を使用するように指定する
 
 
第6章 Webアプリケーションサーバの構築
- 6.1 リバースプロキシの構築
- 負荷分散のための役割
 - Webアプリケーションサーバにおけるリバースプロキシ
 - リバースプロキシの設定
 - プロキシ先の指定
 - リクエストボディに関する設定
- リクエストボディの最大サイズ
 - リクエストボディのバッファリング
 - 一時ファイルの出力先
 
 - レスポンスのバッファリングに関する設定
- バッファサイズの指定
 - 一時ファイルの出力先の指定
 - 一時ファイルの最大サイズを指定
 
 - プロキシのタイムアウトに関する設定
 
 - 6.2 Ruby on Railsアプリケーションサーバの構築
- UnicornのRuby on Railsアプリケーションへの組込み
 - nginxの設定
- 静的ファイルの配信
 - Hostヘッダと送信元情報の付与
 
 - 起動と動作確認
 
 - 6.3 PHPアプリケーションサーバの構築
- PHP-FPMの設定
 - nginxの設定
- すべてのページをindex.phpで処理
 
 - [Column]WebSocketプロキシとしてのnginx
 
 - 6.4 まとめ
- [Column]rewriteとtry_filesディレクティブの挙動
 
 
第7章 大規模コンテンツ配信サーバの構築
- 7.1 大量のコンテンツを配信するには
- 問題点と対策のポイント
- ディスクI/O
 - ネットワーク
 
 - 問題となる負荷の特定
 - 負荷削減へのアプローチ
 
 - 問題点と対策のポイント
 - 7.2 大規模コンテンツ配信のスケールアウト
- キャッシュ
- CDNによるキャッシュ
 - キャッシュ対象による有効性の違い
 
 - ロードバランス
- L4ロードバランサ
 - L7ロードバランサ
 - DNSラウンドロビンによるロードバランス
 
 
 - キャッシュ
 - 7.3 nginxによるコンテンツキャッシュ
- 保存先の指定
- キーゾーンのサイズ指定
 - ディレクトリ階層の指定
 - キャッシュ容量の指定
 - キャッシュマネージャの制御
 
 - 有効期限の指定
- キーゾーンごとに有効期限を指定
 - レスポンスヘッダに有効期限を指定
 - ステータスコードごとに有効期限を指定
 
 - キャッシュ条件の指定
 - 一時ファイルの保存先指定
 - キャッシュ更新負荷の削減
 
 - 保存先の指定
 - 7.4 オリジンサーバの構築
- オリジンサーバに必要な機能
 - レスポンスヘッダの追加
- ExpiresとCache-Controlヘッダの追加
 - 指定するヘッダによる違い
 - プライベートな情報をキャッシュさせないように注意
 
 - 条件付きリクエストの利用
- Last-Modifiedヘッダフィールド
 - ETagヘッダフィールド
 
 - 画像サムネイルの作成
- ngx_http_image_filter_moduleの組込み
 - 画像の縮小とクロップ
 - バッファサイズの指定
 
 - WebDAVによるアップロード
- ngx_http_dav_moduleの組込み
 - WebDAVサーバの設定
 - 使用できるメソッドの指定
 - WebDAVの動作確認
 
 
 - 7.5 ロードバランサの構築
- アップストリームサーバの指定
 - リクエストの振り分け方法の指定
- コネクション数による振り分け
 - クライアントのIPアドレスによる振り分け
 - 指定したキーによる振り分け
 
 - アップストリームサーバへのTCPコネクションを保持
 - アップストリームのタイムアウトとエラー処理
 
 - 7.6 キャッシュとロードバランスを利用したコンテンツ配信
- キャッシュサーバのスケーリング
 - ネットワーク負荷の削減
 
 - 7.7 まとめ
- [Column]サーバのレスポンスを確認する
 
 
第8章 Webサーバの運用とメトリクスモニタリング
- 8.1 nginxのステータスモニタリング
- エンドポイントの指定
 - 取得できる統計情報
 - Muninによるモニタリング
 
 - 8.2 アクセスログの記録
- 記録する項目
- リクエストをトレースするために記録する項目
 - プロキシサーバで記録する項目
 
 - フォーマットの選択
- Apache Combined Log
 - TSV
 - LTSV
 
 
 - 記録する項目
 - 8.3 Fluentdによるログ収集
- ログファイルの入力
- ファイルパスとポジションファイルの指定
 - ログフォーマットの指定
 - LTSVフォーマットの入力
 - TSV,CSVフォーマットの入力
 - nginx標準フォーマットの入力
 
 - ログの転送
- バッファの設定
 - 転送先サーバの設定
 
 
 - ログファイルの入力
 - 8.4 Fluentd,Norikra,GrowthForecastによるメトリクスモニタリング
- Fluentdの設定
 - Norikra
 - Norikraへイベントを出力
 - Norikraから集計結果を入力
 - GrowthForecastへの出力
 - Norikraにクエリを登録
 
 - 8.5 ログファイルのローテーション
- ローテーション間隔の指定
 - ログファイルの圧縮
 - ログファイルの再オープン
 
 - 8.6 無停止でのアップグレード
- ロードバランサ,DNSを利用したローリングアップグレード
 - シグナルによるオンザフライアップグレード
 - アップグレードの詳細
- 構文チェックの実行
 - ?新しいバイナリを起動
 - ?古いワーカプロセスを終了
 - ?古いマスタプロセスを終了
 - アップグレードの切り戻し
 
 
 - 8.7 まとめ
 
第9章 Luaによるnginxの拡張──Embed Lua into nginx
- 9.1 ngx_lua
- LuaとLuaJIT
 - 環境の準備
- Lua,LuaJITのインストール
 - ngx_luaをnginxに組み込む
 
 
 - 9.2 nginxをLuaで拡張
- nginxの各リクエスト処理フェーズとLuaが実行されるタイミング
- rewriteフェーズ
 - accessフェーズ
 - contentフェーズ
 - logフェーズ
 - 初期化フェーズ
 - その他のフェーズ
 
 - Luaの実行環境を設定
 
 - nginxの各リクエスト処理フェーズとLuaが実行されるタイミング
 - 9.3 ngx_lua APIプログラミング
- Hello, World!
 - HTTPステータスの設定
 - ロギング
 - リダイレクト
 - URIのリライト
 
 - 9.4 nginxの内部変数の参照
- 代入不可能な変数(定数)がある
 - 既存の変数に対してだけ代入可能
 - 代入できるのは文字列と数値とnilのみ
 
 - 9.5 HTTPリクエストやレスポンスの操作/参照
- ヘッダの操作/参照
 - クエリパラメータの操作/参照
 - POSTパラメータの参照
 
 - 9.6 正規表現
- ngx.reで利用可能な修飾子
 
 - 9.7 データの共有
- ngx.ctx
 - ngx.shared.ゾーン名
 
 - 9.8 サブリクエストをノンブロッキングで処理
 - 9.9 実践的なサンプル
 - 9.10 まとめ
- [Column]PCREのJIT機能が有効かチェックする
 
 
第10章 OpenResty──nginxベースのWebアプリケーションフレームワーク
- 10.1 OpenRestyの導入
- OpenRestyを利用するメリット
 - OpenRestyのダウンロード
 - OpenRestyのインストール
- 付属モジュールの組込み/取り外し
 - OpenRestyにバンドルされているnginxのビルドオプションを指定
 
 
 - 10.2 OpenRestyにバンドルされているLuaモジュール
- resty-cli
 - lua-cjson
 - lua-resty-core
 - lua-resty-string
 - lua-resty-memcached
 - lua-resty-redis
 - lua-resty-mysql
 
 - 10.3 memcached,Redis,MySQLへの接続のクローズとキープアライブ
 - 10.4 まとめ
- [Column]OpenRestyやngx_luaを利用したアプリケーションのテスト
 
 
- 索引
 - 著者紹介