nginx
308
コード 308 はバージョン 1.13.0までリダイレクトとして扱われませんでした。
HTTP サーバ
特徴
イベント駆動
I/O Multiplexing
ノンブロッキング I/O
非同期 I/O
アーキテクチャ
イベント駆動
何らかのイベントが発生するまで待機し、発生したイベントの種類に応じて定められた手順を実行
システムコール
epoll
inotify
sigaction
ライブラリ
libevent
libuv
Web サーバのように同時に複数の処理を行うシステムでは、ディスクやネットワークといった I/O の多重化が必要
I/O 多重化を実装する select / poll といったシステムコールが利用される
プログラムがアクセスするファイルやネットワークソケットなどのファイルディスクリプタを 1 つ 1 つチェックするため、チェックするディスクリプタが増えると処理も増える
O(n)
epoll はディスクリプタの状態がカーネル内で管理されるため、プログラムはディスクリプタを 1 つ 1 つチェックする必要が無くなる
O(1)
非同期 I/O
入出力処理が開始されてもプログラムをブロックせず、入出力処理とそれ以外の処理を並行して実行するための仕組み
動的コンテンツ
nginx とは別プロセスでアプリケーションプログラムを可動させる必要がある
動作モデル
マルチプロセス構成
マスタープロセス
ワーカープロセスの制御と管理
ワーカープロセスの PID を保持しているので設定ファイルの再読込などはマスタープロセスに対してシグナルを通して命令するだけで nginx 全体のプロセスを制御できる
ワーカープロセス
クライアントからの接続要求にはじまる一連の処理をイベント駆動で実行
シングルスレッドで動作
バージョン
stable 版
API 非互換はありえない
高いバグ修正のみ取り込まれる
mainline 版
新機能やバグフィックスが最初に取り込まれる
API 非互換がありえる
通常はこちらを利用する
## Stream
- 任意のポートで TCP 接続を待ち受けることができる
- empty_gif
- nginxの標準モジュールが持つ機能で、nginxがメモリに保持している1x1ピクセルの透過 GIF ファイルをクライアントに返すことができます。
References
設定ファイルをいい感じに出力してくれる
設定ファイルのテンプレート
## ログ
- $request_time
- ミリ秒で表示
$request_uri
クエリパラメーター付きの URI
$uri
正規化された URI
クエリパラメーター付いてない
proxy_next_upstream
どのような場合に次のサーバにリクエストを渡すのかを指定
proxy_next_upstream error timeout http_403 http_404;
最初のサーバとの接続でエラー、タイムアウト、またステータスコードとして 403、404 が返った場合に次のサーバに接続するように指示する
proxy_hide_header
nginx からクライアントに渡さないヘッダーを設定
デフォルト
Date
Server
X-Pad
X-Accel-
proxy_http_version
プロキシする際の HTTP プロトコルのバージョン
デフォルト 1.0
keepalive などを利用する場合には 1.1 にする
デフォルトは off
off の場合には追加または変更が無効
expires 600;
時間が、
負
Cache-Control: no-cache
0 以上
Cache-Control: max-age=t
指定された変数に値をセット