kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

Nginxのディレクティブ一覧

最近インフラの記事ばかり書いていますが、興味あるし、楽しいからやっています。 プログラマで、インフラからアプリ開発までする方もいるの知っていますが、珍しいんでしょうか。

Nginxの設定

Nginxのインストールを終えているので、設定周りを進めていきたいですが、 Nginxの書籍についても手に入れているので、こちらのディレクティブについて軽くまとめておきます。

設定ファイルのフォーマット

<section>
  <directive> <parameter>;
</section>

全てではありませんが、セクションをいくつか上げていきたいと思います。

セクションの一覧

グローバルセクション

  • user
    • ワーカプロセスを実行するユーザー名とグループ名が設定される。グループ名が省略された場合、グループ名はユーザ名と同一と
      みなされる
  • worker_processes
    • 起動されるワーカプロセス(worker process)数を示す。ワーカプロセスかクライアントからのコネクションすべてを処理する。
  • error_log
    • error_logはすべてのエラーが書き込まれるファイルを指定する。個別のコンテキストでerror_logが指定されていない限り、ここで指定したログファイルがエラーすべてに用いられる
  • pid
    • これはメインプロセスのプロセスIDが書き込まれるファイルを示す。コンパイル時のデフォルト値を上書きする
  • use
    • userディレクティブは利用するコネクション処理方式を示し、コンパイル時のデフォルト値を上書きする。これはeventsコンテキストで 指定しなければならない。コンパイル時のデフォルト値では、エラーが発生してしまうような場合をのぞき、通常これを上書きする必要はない
  • worker_connections
    • このディレクティブはワーカプロセスが同時にオープン可能なコネクションの最大数を設定する。

インクルードファイルの利用

HTTPサーバセクション

Nginxのビルドの際にHTTPモジュールを無効化(--without-http)しない限り利用できます。 私は、yumからインストールしているので利用可能です。

クライアントディレクティブ
  • chunked_transfer_encoding
    • クライアントへのレスポンスの際に、HTTP/1.1標準のチャンク転送エンコードを無効にする
  • client_body_buffer_size
    • クライアントからのリクエストボディを読み取る際のバッファサイズを指定する。デフォルトはページサイズの2倍。リクエストボディが これを超える場合はテンポラリファイルに書き込まれる。
  • client_body_in_file_only
    • 本ディレクティブにより、Nginxはクライアントからのリクエストボディに追加の処理を行う場合に用いる。本ディレクティブをonにする。 本ディレクティブをonにすることで、クライアントからのリクエストボディが強制的にファイルに保存される。
  • client_body_in_single_buffer
    • 本ディレクティブにより、Nginxはクライアントからのリクエストボディ全体を強制的に単一のバッフォに保存するため、コピー操作が提言される
  • client_body_temp_path
    • クライアントからのリクエストボディを保存するパスを設定する
  • client_body_timeout
    • クライアントからのリクエストボディを読み取る際のタイムアウト値を指定する
  • client_header_buffer_size
    • クライアントからのリクエストヘッダのバッファサイズ。デフォルトの1KBを超えるサイズが必要となった際に設定する
  • client_max_body_size
    • クライアントからのリクエストボディの最大長。これを超えた場合、413(Request Entiry Too Large)エラーがブラウザに返却される
  • keepalive_disable
    • ブラウザからのキープアライブリクエストを無効にする
  • keepalive_requests
    • 単一のキープアライブコネクションからクローズされるまでに発行可能なリクエスト数を指定する
  • large_client_header_buffers
    • クライアントからのリクエストヘッダの最大数と最大サイズを指定する
  • msie_padding
    • Internet Explore(MSIE)クライアントが400以上のステータスでレスポンスを返却する際に、レスポンスのサイズを512バイト以上 にするためにコメントを追加する機能を有効にする
  • msie_refresh
    • MSIEクライアントに対して、リダイレクトを送信する代わりにリフレッシュを送信する機構を有効にする
ファイルI/Oディレクティブ
  • aio

    • 非同期ファイルI/Oの使用を有効にする。これは、最近のFreeBSDおよびLinuxディストリビューションのすべてで利用できる。FreeBSDの場合、 aioはsendfuke用のデータをあらかじめロードしておくために用いられることがある。Linuxの場合directioも有効にする必要があるため、 sendfileが自動的に無効となる。
  • directio

    • パラメータで指定されたサイズより大きいファイルを配信する際に、OS固有のフラグや関数を有効にする。これはLinuxでaioを用いる際に 必須である。
  • directio_alignment

    • directioで用いるアラインメントを設定する。デフォルオ値の512で通常は十分だが、LinuxでXFSを用いる際は、この値を4Kに増やしておく ことを推奨する
  • open_file_cache

    • オープン中のファイルディスクリプタ、ディレクトリ検索結果、ファイル検索結果のエラーを格納するキャッシュを設定する
  • open_file_cache_errors

    • open_file_cacheによるファイル検索ケッアエラーのキャッシュを有効にする
  • open_file_cache_min_uses

    • ファイルディスクリプタをオープンしたままキャッシュ内に保持し続ける上で、open_file_cacheのinactiveパラメータで指定 された時間内に最低何回の使用を必要とするかを設定する。
  • open_file_cache_valid

    • open_file_cache内のエントリの有効性をチェックする時間感覚を設定する
  • postpone_output

    • Nginxがクライアントに送信するデータの最小サイズを指定する。他の要因がなければ、この値を超えるまではいかなるデータも 送信されない
  • read_ahead

    • 可能な場合、カーネルはsizeパラメータで指定したサイズまでファイルをあらかじめ読み取っておく。本パラメータは現在のとこFreeBSDLinuxでのみサポートされている。(Linuxにおいてsizeパラメータは無視される)
  • sendfile

  • sendfile_max_chunk

    • ワーカプロセスが待機してしまうことを避けるため、1回のsendfile(2) 呼び出しでコピー可能なデータの最大サイズを指定する
ハッシュディレクティブ
  • server_names_hash_bucket_size

    • server_nameハッシュテーブルを保持するエントリのサイズを指定する
  • server_names_hash_max_size

    • server_nameハッシュテーブルの最大エントリ数を指定する
  • types_hash_bucket_size

    • typesハッシュテーブルの最大エントリ雛を指定する
  • variables_hash_bucket_size

    • その他のへんs縫うを保持するエントリ野サイズを指定する
  • variables_hash_maz_size

    • その他の変数の保持するハッシュテーブルの最大エントリ数を指定する
ソケットディレクティブ
  • lingering_close

    • クライアントからのコネクションをクローズする際に、追加で送信されたデータへの対応を制御する
  • lingering_time

    • 本ディレクティブは、lingering_closeディレクティブが有効になっているコネクションで、通過で送信されたデータを処理するために コネクションをオープンしておく時間を指定する
  • ligering_timeout

    • 本ディレクティブも、lingering_closeと組み合わせる事で、Nginxがコネクションをクローズする前に、追加されたデータを待ち受ける時間を 指定する
  • reset_timedout_connection

    • 本ディレクティブが有効な場合、タイム会うとしたコネクションは即座にリセットされ、関連するメモリがすべて開放される。デフォルトでは、 ソケットがFIN_WAIT1の状態のまま残る。キープアライブコネクションは、常にデフォルトの動作を行う
  • send_lowat

    • 0以外の場合、Nginxはクライアントとのソケットにおける送信処理の回数を最小化しようとする。Linux, Solaris, Windowsでは無視される。
  • send_timeout

    • 書き込み処理に対するクライアントからのレスポンスのタイムアウト値を設定する
  • tcp_nodelay

    • キープアライブコネクションに対するTCP_NODELAYオプションの有効化、無効化を制御する
  • tcp_nopush

    • sendfileを使っている場合のみ有効である。有効かすることで、可能な限り最大サイズのパケットを用いてファイルを送信する といった動作を試行するようにする
仮想サーバセクション
  • default_server

    • リクエストがデフォルトで処理されるaddress:portのペアを定義する
  • setfib

    • 待ち受けているソケットにFIBを設定する
  • backlog

    • listen()のbacklogパラメータを指定する
  • rcvbuf

    • 待ち受けているソケットにSO_RCVBUFパラメータを設定する
  • sndbuf

    • 待ち受けているソケットにSO_SNDBUFパラメータを設定する
  • accept_filter

    • accept_filter名としてdatareadyもしくはhttoreadyを設定する
  • deferred

    • 遅延accept()を用いるためにTCP_DEFER_ACCEPTオプションを設定する
  • bind

    • addres:portのベアに対して個別にbind()を行う
  • ipv6only

    • IPV6_V6ONLYパラメータの値を指定する
  • ssl

    • このポートではHTTPSのコネクション以外実行しないことを示す
  • so_keepalive

    • 待ち受けているソケットに対して、TCPキープアライブを設定する
ロケーション
  • alias

    • ファイルシステム参照の際に用いるロケーションの別名を定義する。ロケーションが正規表現で定義されている場合、aliasにはその正規表現 で定義されたキャプチャが含まれている必要がある。aliasにはその正規表現で定義されたキャプチャが含まれている必要がある。 aliasは、ロケーションにマッチした部分のURIを置き換える。言い換えると、URIのうちマッチしなかった部分はそのままファイルシステム上の パスの参照に用いられる。aliasディレクティブを用いると、設定まわりを少し変更しただけでも動作に影響がでてしまうため、ファイルを参照する ためにURIを修正する必要がなければ、rootディレクティブの利用が推奨される
  • internal

    • 内部リクエスト(リライト(rewrite) リクエスト、エラーページなどのディレクティブで定義されたリダイレクト)以外から利用できないロケー ションであることを宣言する
  • limit_except

    • ロケーション内で利用できるHTTPメソッド(GETにはHEADも含まれる)を制限する

メールサーバセクション

  • こちらは利用する予定がないので省きます。

以上です。