目次
- 本書に寄せて
- はじめに
- 各章の執筆者と初出一覧
- 参考文献/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を利用したアプリケーションのテスト
- 索引
- 著者紹介