next up previous contents
Next: 3.2.1 設定のチェック Up: 3. Nginxの基本 Previous: 3.1.2 変数、値、文字列

3.2 基本的な設定

ここでは、まず簡単なWebサーバをnginxを用いて立ち上げるために必要な 設定について学びます。

worker_processes 1;


events {}

http {
    include mime.types;
    access_log    /var/log/nginx_access.log;
    error_log     /var/log/nginx_error.log  info;

    server {
        listen 80;
        server_name net-0.matsue-ct.ac.jp;
        index index.html index.htm;
        location  /  {
            root    /usr/local/www/nginx;
        }
    }
}

worker_processes
実際にクライアント要求を処理するプロセス数を指定
通常、コア数程度を指定することが推奨されている。一方、ファイルへのアクセスなどが多い場合には、ファイルI/Oをフルに利用するために、このワーカー数を増やす方が、 パフォーマンスが出る場合もある。 また、OSによっては2つのワーカーを動かしても、同じコアに割り付ける場合も あるので、そうした場合には、worker_cpu_affinity を設定する必要がある。 但し、現在のところこれはLinux専用である。詳しくは Wiki を参照されたい。

access_log
アクセスログの出力

     access_log  path [ name_of_format [ buffer = size [flush = time ]]]
     access_log  path   name_of_format gzip[= [ buffer = size ] [ flush = time ]]
     access_log  off

  1. path ログファイル(フルパスまたは相対パス)
  2. name_of_format フォーマット形式名
    省略した場合のデフォルトは、combined 。独自フォーマットを指定する 場合には、log_formatディレクティブで指定する。

ログは、http, server, location, If in location, limit_except などの コンテキストで指定できる。nginxでは、アクセスログはかなり強力で、 異なるコンテキストで、複数のファイルにアクセスログを出力できるように なっている。

error_log
エラーのログ出力

     error_log   <file|stderr> [debug|info|notice|warn|error|crit|alert|emerg];

引数の1番目は、ファイルまたは stderr が指定できる。ファイルは、フルパス または相対パス(/usr/local/etc/nginx からの)で指定する。 引数の2番目は、エラーレベルの指定で、省略するとデフォルトが適用されるが、 コンテキストによって、エラーレベルのデフォルトが異なるので注意が必要。

  1. グローバルコンテキストでは、error
  2. HTTPコンテキストでは、crit
  3. serve コンテキストでは、crit

なお、コンパイル時に、--with-debug でconfigした場合には、エラーレベル の指定に更に、以下のものが指定できます。

    [debug_core|debug_alloc|debug_mutex|debug_event|debug_http|debug_imap]

また、エラーログのオフスイッチはないために、捨てる場合には以下のようにする。

    error_log   /dev/null   crit;

使用できるコンテキストは、main, http, server, location となっているが、 access_log とは実現されているモジュールが異なるので、オプションや スイッチは異なっているので、注意されたい。

events
nginx のパフォーマンスやネットワークに関する設定
このブロックは必ずグローバルの位置になければなりません。 何も設定しなくても構いませんが、必ずこのブロックがあることが必要です。 なければエラーとなります。主には、ワーカーの同時コネクション数や、 キューイングアルゴリズムなど、ネットワークやパフォーマンスに関する 設定がされます。

include
任意のファイルの読み込み

指定したファイルを該当箇所に挿入します。なお、Apacheなどと同じように、 * などを用いた指定が可能です。パスは nginx.conf のある場所からの 相対パスです。

    include Inc/*.conf

listen
受信するアドレスとポート番号の指定

server コンテキストのみで利用できます。元々は、ポート番号のみを指定する オプションでしたが、アドレスなども含めて指定できるように拡張され、多くの オプションがあります。

     listen  address[:port]  [options...];
     listen  port [options...];

例
     listen 127.0.0.1:8000;
     listen 127.0.0.1;
     listen 8000;
     listen *:8000;
     listen localhost:8000;

IPアドレスのみを指定する場合には、デフォルトで80番にバインドします。

また、サーバ名などを用いてバーチャルホストを利用する場合に、それらの バーチャルホスト名にヒットしなかった場合のデフォルトを指定するために、 default_server オプションが用意されています。

例
    listen 127.0.0.1:80 default_server;
    listen 80           default_server;

server_name
HTTP要求のHostヘッダと比較して、サーバを決定する

nginx では、バーチャルサーバを実現するためにもこのディレクティブが 利用されるために、非常に重要な要素です。構文自体は簡単です。

    server_name   name1  [name2  [name3 [...]]];

HTTP要求ヘッダ内にあるHostヘッダにある名前と、ここに列挙したいずれかの 名前にヒットした場合、このディレクティブが置かれた server コンテキストが 適用されます。名前には、ワイルドカードや、正規表現での指定も可能ですが、 優先される一致則があります。

  1. 静的な名前に完全一致
  2. ワイルドカードに始まる名前への一致, ex: *.example.com
  3. ワイルドカードで終わる名前との一致, ex: www.example.*
  4. 正規表現で表現された名前との一致

これらのパターンに一致しなかった場合には、以下の順で server ブロックが 適用されます。

  1. [default|default_server] が指定されているlistenディレクティブに一致
  2. listen ディレクティブに最初に一致した server ブロック

index
インデックスに利用するファイル名の指定

http, server, location コンテキストで利用できます。

    index file1 [file2 [file3 [...] ] ];

例
    index  index.html index.htm index.php /index.html;

記述した順に検索されます。ファイル名には変数を含ませることが出来ます。 また、リストの最後のファイル名には、絶対パスを含めて指定することが できますが、この場合リダイレクトを引き起こすために、nginx では再度 URLの一致検索が起こるために思わぬアクシデントを引き起こす場合があります。 このURLの検索の再度実行については、後で詳しく見ることにします。

location
URI 中のファイル指定に対する一致パターンの指定

最初に述べたように、nginx ではHTTP要求メッセージ中のURIに対して、3つの レベルで一致規則を設定できるようになっている。このレベルは、上から プロトコルレベル(httpブロック)、サーバレベル(serverブロック)、そして locationレベルです。これは具体的には、

     http://net-00.matsue-ct.ac.jp/hoge.html

という要求に対して、http:,net-00.matsue-ct.ac.jp, /hoge.html の3つのレベルで、一致するコンテキストを順に検索するようになっています。 このようにして、最後の段階に対するパターンを指定するのが location ブロック です。このようにして、locationブロックはserverブロック内に、 並置することが出来ます(入れ子にも出来ます)。

ここで示している例では単純に、/ のみが指定されているので、これは このserverブロックの全てのURIに一致します。

並置した場合に、どれが一致するのかや、正規表現を用いて location を書いた場合 の優先規則などもあるために、非常に複雑ですが、それについては後で述べます。

root
ドキュメントルートのパスを指定

Apacheの DocumentRoot に相当し、要求されたURIに対応するファイルをどこの パスから検索するのかを指定します。

例
     location /hoge/ {
         root /usr/www/data;
     }

この設定に対して、URIが /hoge/page.html であった場合、 /usr/www/data/hoge/page.html というファイルがヒットするように なっています。この動作は、Apacheと異なっているので、注意して下さい。 もし、Apache的な動作を期待するのであれば、rootと同じようですが、 alias ディレクティブを利用して下さい。

root ディレクティブは、http, server, location, If in location などの コンテキストで利用できます。




next up previous contents
Next: 3.2.1 設定のチェック Up: 3. Nginxの基本 Previous: 3.1.2 変数、値、文字列
Noriyo Kanayama