Contents
設定ファイルの構成と基本用語
一般的な設定ファイル( /etc/nginx/conf/nginx.conf )は下記のようになっているでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
worker_processes 1; events { worker_connections 1024; } http { server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } #トップのnginx.confには下記のように書いておきconf.d以下のディレクトリで #バーチャルホストごとの設定を書くのが一般的です。 include /etc/nginx/conf.d/*.conf; } |
以下説明をさせていただきます。
ディレクティブ
それぞれの設定項目(worker_processessやevent,httpなど)のことをディレクティブとよみます。例eventディレクティブなど
数値、文字、真偽値、$から始まる変数などを使用できます。
コンテキスト
一部のディレクティブは一行で終わらずに内容が{}をつかい複数行にわかれます。(server,locationなどが一般的)
基本的なディレクティブの遷移
nginxがリクエストを処理する場合、下記のような流れになります。
- Hostヘッダ、ポートでどのserverディレクティブにマッチするかを決める
- マッチするserverディレクティブ内の処理を行う
- serverディレクティブ内のマッチするloactionコンテキストの処理を行う
下記に必要なディレクティブを列挙していきます。
serverディレクティブ
HTTPサーバーのバーチャルホストを定義します。定義したホストが受け取るポート番号やドメインはserver内に記述します。
1 2 3 4 5 |
server { listen 80; server_name localhost; #ここに諸所の設定を書く } |
locationディレクティブ
指定した条件にマッチするパスに対する処理を記述するために使用します。
マッチする条件は正規表現などを使って記述できます。
1 2 3 |
location /images/{ #imagesに的使用したい設定 } |
rootディレクティブ
実際にコンテンツを置くディレクトリを指定します。
ディレクトリは絶対パスかnginxのインストールディレクトリからの相対パスで指定します。
rootディレクティブはhttpコンテキスト、serverコンテキスト、locationコンテキストに記述できます。
またテキストにマッチしたパス以下のルートディレクトリになります。
1 2 3 4 5 6 7 8 |
#http://www.example.comがルートになる location /{ root html } #http://www.example.com/html/がルートになる location /html/ { root html } |
http://skill-up-engineering.com/?p=1784 のrootの項目を参照
error_pageディレクティブ
エラーの際に表示するURLを指定します。引数には、スペース区切りで並べたHTTPステータスコードを指定し、最後に引数にそのステータスコードでマッチした場合に表示するURLを指定します。
また@から始まるパスを思料することで、ほかのサーバーにフォールバックするような設定を書くことができます。
1 2 3 4 5 6 7 8 |
error_page 404 /404.html error_page 502 503 504 /5xx.html #下記のように記述することも可 location @fallback location @fallback{ proxy_pass http://サーバーURL } |
userディレクティブ
ワーカープロセスを稼働させるユーザー、グループを指定します。指定しない場合はnobodyユーザー、ngobodyグループになります。
worker_processディレクティブ
ワーカの数を指定します。nginxは1つのワーカプロセスがリクエストを処理しますが、それぞれのワーカーはシングルスレッドで動作します。
そのため基本的にはCPU数のコア数と同じ値を指定することになります。しかしnginxが大量の静的ファイルを処理する場合には、CPU処理時間よりもI/O待ちの時間が長くなってしまうことがあげられます。この場合は、CPUのコア数よりも若干多めにすることでパフォーマンスを向上させられます。
worker_connectionディレクティブ
各ワーカが処理するコネクション数を指定します。各ワーカがこの値を超えるコネクションを受け入れようとすると503を返す。各ワーカが処理できる不可を考えつつ設定するとよいでしょう。
worker_rlimit_nofileディレクティブ
各ワーカがオープンできるファイルディスクリプタの最大数を指定します。nginxに大量のファイルを処理させる場合には、この値を大きくする必要があります。このnginxのキャッシュ機構はファイルを用いて実現されているため、キャッシュ機能を利用している場合にも注意する必要があります。