skillup

技術ブログ

サーバー・ネットワーク

nginxの設定ファイルの書き方に関して

投稿日:2016年12月8日 更新日:

設定ファイルの構成と基本用語

一般的な設定ファイル( /etc/nginx/conf/nginx.conf )は下記のようになっているでしょう。

以下説明をさせていただきます。

ディレクティブ

それぞれの設定項目(worker_processessやevent,httpなど)のことをディレクティブとよみます。例eventディレクティブなど

数値、文字、真偽値、$から始まる変数などを使用できます。

コンテキスト

一部のディレクティブは一行で終わらずに内容が{}をつかい複数行にわかれます。(server,locationなどが一般的)

基本的なディレクティブの遷移

nginxがリクエストを処理する場合、下記のような流れになります。

  1. Hostヘッダ、ポートでどのserverディレクティブにマッチするかを決める
  2. マッチするserverディレクティブ内の処理を行う
  3. serverディレクティブ内のマッチするloactionコンテキストの処理を行う

下記に必要なディレクティブを列挙していきます。

serverディレクティブ

HTTPサーバーのバーチャルホストを定義します。定義したホストが受け取るポート番号やドメインはserver内に記述します。

locationディレクティブ

指定した条件にマッチするパスに対する処理を記述するために使用します。

マッチする条件は正規表現などを使って記述できます。

rootディレクティブ

実際にコンテンツを置くディレクトリを指定します。

ディレクトリは絶対パスかnginxのインストールディレクトリからの相対パスで指定します。

rootディレクティブはhttpコンテキスト、serverコンテキスト、locationコンテキストに記述できます。

またテキストにマッチしたパス以下のルートディレクトリになります。

http://skill-up-engineering.com/?p=1784 のrootの項目を参照

error_pageディレクティブ

エラーの際に表示するURLを指定します。引数には、スペース区切りで並べたHTTPステータスコードを指定し、最後に引数にそのステータスコードでマッチした場合に表示するURLを指定します。

また@から始まるパスを思料することで、ほかのサーバーにフォールバックするような設定を書くことができます。

userディレクティブ

ワーカープロセスを稼働させるユーザー、グループを指定します。指定しない場合はnobodyユーザー、ngobodyグループになります。

worker_processディレクティブ

ワーカの数を指定します。nginxは1つのワーカプロセスがリクエストを処理しますが、それぞれのワーカーはシングルスレッドで動作します。

そのため基本的にはCPU数のコア数と同じ値を指定することになります。しかしnginxが大量の静的ファイルを処理する場合には、CPU処理時間よりもI/O待ちの時間が長くなってしまうことがあげられます。この場合は、CPUのコア数よりも若干多めにすることでパフォーマンスを向上させられます。

worker_connectionディレクティブ

各ワーカが処理するコネクション数を指定します。各ワーカがこの値を超えるコネクションを受け入れようとすると503を返す。各ワーカが処理できる不可を考えつつ設定するとよいでしょう。

worker_rlimit_nofileディレクティブ

各ワーカがオープンできるファイルディスクリプタの最大数を指定します。nginxに大量のファイルを処理させる場合には、この値を大きくする必要があります。このnginxのキャッシュ機構はファイルを用いて実現されているため、キャッシュ機能を利用している場合にも注意する必要があります。

参考文献

サーバー・インフラ徹底攻略

-サーバー・ネットワーク
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

サーバー構築(ゼロからの準備編)

VPSのサーバーを入れるときにほぼ確実にインストールするパッケージなどを。 Contents0.1 update&言語表記0.2 基本ライブラリ0.3 sudoユーザーの設定0.4 apache0.5 …

no image

Firebaseでのミニアプリデプロイ

KVS的なDBを使うかもしれず、firebaseの復習をしております。以前、firebaseのサンプルなどちょこちょこ動かしましたが、firebaseに登録をしただけでデプロイまではしておりませんでし …

no image

form以外でのPOST送信(というかHTTP通信全般)

前回の記事に引き続きですが、APIを叩く側はformでデータを送るのではなく、コードの中にPOSTする処理を書きます。 選択肢としては curlコマンドを使う file_get_contentsを使う …

no image

nginxのデバッグ

今までいろいろと苦しめられてきた(汗)nginxのデバッグについて。 まず任意の文字や変数をログに出すことができます。 Contents1 変数の出力1.1 rewriteデバッグ2 小ネタ 変数の出 …

no image

vagrantでの静的ファイルのキャッシュがクリアされない

タイトルのまんまですが、vagrantでapacheを使ってまして、静的ファイルのキャッシュがクリアされないと言う問題が発生しました。 vagrantは結構長い間使ってましたが、今まで素のhtmlを書 …

アーカイブ