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

crontab 確認方法

crontabが動かないときに確認すること。 Contents1 cron自体が動いているか(下記コマンドでログを確認)2 実行権限が正しいか3 プログラム内部のファイルパスが絶対パスになっているか4 …

no image

負荷調査のセオリー

以前にも下記リンクで負荷調査について記事を書いたんですが、もう少し掘り下げてみようかと。 サーバーの過負荷の発見 理論編 サーバーの過負荷の発見 メモリ使用率の調査&抽出、置換(awk,sed)コマン …

no image

SQSについて

以前、少しQueueの登録について書きましたが、今回はAWSのキューサービスであるSQSについて。 以前のリンク Queueの登録と実際の処理に関して SQSのポイントについて簡単にまとめて置きたいこ …

no image

追跡ブランチからローカルブランチを作る方法~ (svn→gitの移行など)

SVNで運用されていたプロジェクトをgitに移行する機会があったのでその時のメモなどを。 思ってたよりは楽だったかな・・・ Contents1 準備2 実際の移行(git svn clone)3 gi …

no image

データのシリアライズ

おととしにJavaをやったときにでてきましたがSessionに情報を格納するときにでてきたシリアライズについて。 セッションはステートフルな状態を実現するための便利なデータの保存方法ですが、値をオブジ …