設定ファイル
ディレクティブとコンテキスト
- 設定ファイルには、ディレクティブと呼ばれる設定項目を記述する。
 - ディレクティブにはセミコロンで終わるものと{}で囲ったブロックでコンテキストを作成するものがある。
 - どのブロックにも含まれない最も外側のコンテキストをmainコンテキストと呼ぶ。
 - ディレクティブには記述できるコンテキストが決まっている。
例えば、httpディレクティブはmianコンテキスト、serverディレクティブはhttpコンテキストの中にしか書けない。 
#から行末まではコメントとなる。
ディレクティブには改行を含めることができ、コメントとは異なり、行末ではなくセミコロンやブロックの終了までがディレクティブとなる。
includeディレクティブ
引数に絶対パス、または/etc/nginxからの相対パス、でファイル名を指定する。
globパターンを使うこともできる。include conf.d/*.conf;
「conf.dディレクトリにserverディレクティブを記述した設定ファイルを配置し、httpコンテキストでincludeする」というやり方はよく使われる。
mainコンテキスト
nginx.confのmainコンテキストには、nginx全体に関するディレクティブが記述されている。
デフォルトでは以下の設定になっている。
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid・userディレクティブ
worlerプロセスが動作するユーザー名。通常は変更しない。
アクセスするファイルやディレクトリのパーミッションをこのユーザーからアクセスできるようにする必要がある。
・workerディレクティブ
workerのプロセス数。
workerはシングルスレッドで動作するため、CPUはプロセスにつき1個しか使われない。
性能を出したい場合は設定値をCPUコア数にする必要があるが、worker_prosesses auto;と記述することができる。
eventsコンテキスト
nginx.confのeventsコンテキストには、1つのworkerプロセスが同時に受け付けられる接続数がworker_connectionsディレクティブで設定されている。
events {
    worker_connections 1024;
}worker_connectionsには接続された数だけでなく、接続する数も含まれる。
例えば、リバースプロキシとして動作する場合は、バックエンドのサーバとも通信するため、1回のアクセスで2つの接続を使う。
httpコンテキスト
nginx.confのhttpコンテキストには、Webサーバ全体の設定が記述されている。
httpコンテキストに記述できるディレクティブの多くは、httpコンテキストの中でバーチャルホストを記述するserverコンテキストや、serverコンテキストの中でURLごとの動作を記述するlocation contextにも記述することができる。
よって、httpコンテキストには、全てのバーチャルホストに共通の設定を記述する。
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}- default_type
mime.typesをincludeしているが、定義されていない場合はdefault_typeで指定したContent-Typeが使われる。 - log_format
Apacheに似たフォーマットをmainという名前で定義している。 - access_log
main形式を指定している。出力形式を指定しない場合は、combinedという形式になる。 - sendfile
ファイル送信方式を示すディレクティブで性能向上のために指定されている。 - keepalive_timeout
 - Keep-Aliveのタイムアウトを指定している。
 
静的サイトの設定例
以下の内容で/etc/nginx/conf.d/hoge.confを生成する。
※ nginx.confのhttpコンテキストでincludeされる
server {
    listen 80;
    server_name www.hoge.com
    access_log /var/log/nginx/hoge-access.log
    error_log /var/log/nginx/hoge-error.log
    location / {
        root /www/dir;
        index index.html index.php
    }
}
rootディレクティブ
location /files/ {
  alias /data/;
の場合、/files/a.htmlが示すファイルは/data/a.htmlとなる。
rootディレクティブはhttp, server, location, ifコンテキストに書けるため、特定の条件に一致する場合のドキュメントルートの設定になる。
locationディレクティブ
引数に指定されたパスに対応するコンテキストを作る。
書式がいくつかあり優先順位のルールが複雑なため、最もつまづきやすいディレクティブである。
location パス名 {...}
パス名は前方一致となる。location / {...}とすると全てのパスが一致する。location = パス名 {...}
完全一致。location ~ パターン {...}
正規表現でのパス名指定。
※ locationディレクティブはネストさせることができるが、その場合もパス名は先頭から比較される。
location /path/ {
  location /path//subpath/ {...}
  location /subpath/ {...}の場合、 /path//subpath/はマッチすることはあるが、 /subpath/はマッチすることはない。
IP制限
allow, denyディレクティブを利用する。
優先順位は記述順で、最初に一致したディレクティブに従う。
location /private {
    deny 192.168.1.1:
    allow 192.168.1.0/24:
    deny all;
}の場合、192.168.1.1は拒否、192.168.1.2〜255は許可、それ以外は拒否。
Basic認証
location /private {
    auth_basic "enter password";
    auth_basic_user_file /etc/nginx/htpasswd;
}パスワードファイルはApacheと同じものを使うことができ、htpasswdコマンドで作成する。
sudo yum install httpd-toolsでインストール可能。
  
  
  
  
コメント