『nginx実践入門』
https://gyazo.com/f6dc3935a38a654d8c53780bca9cf5cc
2016/1/16
本書に寄せて
はじめに
各章の執筆者と初出一覧
参考文献/URL
ディレクティブ書式の見方
1.1 nginxとは
nginxの特徴
nginxの用途
ColumnそのほかのHTTPサーバ
1.2 nginxのアーキテクチャ
イベント駆動とは
HTTPサーバで発生するイベント
I/O処理の効率化
I/O Multiplexing
ノンブロッキングI/O
非同期I/O
nginxの実際の動作モデル
1.3 まとめ
Columnnginxのコミュニティ
ColumnNGINX Plusとサポートサービス
第2章 インストールと起動
2.1 ソースコードからのインストール
ビルド環境の構築
ソースコードの入手
インストール
ColumnMainline版とStable版の違い
インストールしたnginxの情報を確認
ファイルパスの指定
依存ライブラリを静的に組み込む
PCREのJIT機能を利用するには
モジュールの組込み
サードパーティモジュールの組込み
2.2 パッケージからのインストール
Debian GNU/Linuxの場合
CentOSの場合
FreeBSDの場合
2.3 nginxの起動,終了,基本的な操作
nginxの起動
nginxのプロセスが起動していることを確認
80番ポートをbindしていることを確認
nginxの終了,設定の再読み込み
nginxコマンドによる制御
killコマンドによるシグナルの送信
システムサービスとして実行
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攻撃
4.3 リクエストの書き換え
特定のステータスコード
エラーページの表示
リダイレクト
リクエストURIの書き換え
rewriteディレクティブへのフラグの指定
不必要なrewriteディレクティブ
ifディレクティブとsetディレクティブによる複雑な処理
ファイルの確認
複雑な条件分岐
リファラによる条件分岐
4.4 gzip圧縮転送
動的なgzip圧縮転送
gzip_typesディレクティブ
gzip_min_lengthディレクティブ
gzip_disableディレクティブ
あらかじめ用意した圧縮ファイルを転送
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台のサーバで運用するには
ワイルドカード証明書やSANオプションによる設定
証明書ごとに異なるIPアドレスの割り当て
5.6 まとめ
ColumnHSTSを用いて常にHTTPS通信を使用するように指定する
第6章 Webアプリケーションサーバの構築
6.1 リバースプロキシの構築
負荷分散のための役割
Webアプリケーションサーバにおけるリバースプロキシ
リバースプロキシの設定
プロキシ先の指定
リクエストボディに関する設定
リクエストボディの最大サイズ
リクエストボディのバッファリング
一時ファイルの出力先
レスポンスのバッファリングに関する設定
バッファサイズの指定
一時ファイルの出力先の指定
一時ファイルの最大サイズを指定
プロキシのタイムアウトに関する設定
6.2 Ruby on Railsアプリケーションサーバの構築
UnicornのRuby on Railsアプリケーションへの組込み
nginxの設定
静的ファイルの配信
Hostヘッダと送信元情報の付与
起動と動作確認
6.3 PHPアプリケーションサーバの構築
nginxの設定
すべてのページをindex.phpで処理
ColumnWebSocketプロキシとしてのnginx
6.4 まとめ
Columnrewriteと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の実行環境を設定
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 まとめ
ColumnPCREの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 まとめ
ColumnOpenRestyやngx_luaを利用したアプリケーションのテスト
索引
著者紹介