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

nginxインストール(サブディレクトリでcakePHPを使いたいとき)

以前nginxのインストールを行いましたが、理解が浅かったようで今回すげーはまりました(汗) ガチンコ塾でもいっていますが、覚え始めの時はコピペでもいいですが(最初から100%の理解は非現実的)、慣れ …

no image

キャッシュについて(主にmemcachedを中心に)

Webサービスのパフォーマンス向上で目に見えて効果があることの一つがDBへのアクセス回数を減らすことです。 それはSQLを発行する回数を少なくするなど、普段からのプログラムの書き方ももちろん大事なので …

no image

heroku scheduler(cron的なもの)

herokuでアプリをデプロイしたあと定期的に走らせたいバッチなどがあるとき、cronを使うことを考えると思いますが、herokuではheroku Schedulerというアプリを使います。 hero …

no image

scpコマンドを使ったサーバー間のファイルのやり取り

あるサーバーのファイルを別サーバーにコピーするとき、大昔はFTPを使っていましたが、現在FTPサーバー自体を立てることがあまりないため、SSHを使ったSCPコマンドでのファイル点を使いました。 Con …

no image

vimの基本的な使い方 設定ファイル、基本コマンド他

もう4年ぐらいの付き合いになる憎らしくもかわいいエディタvi(vim)について。 雑誌に特集があったのでこれを機にまとめてみました。シリーズものになるかも・・・ Contents1 Vi(vim)とは …