Nginxとは?

Nginx(エンジンエックス)はwebサーバーのソフトウェアです。
高速処理・高い並行性・小メモリなどの特徴を持ちます。
HTTPキャッシュ・ロードバランサー・リバースプロキシとしても利用できます。

nginx.confとは?

nginx.confとは、nginxの設定ファイルの事です。
こちらのファイルがnginxの設定のベースとなります。

/etc/nginx/nginx.conf

に置かれています。

nginx.confはディレクティブと言われる設定の集合です。
そして、ディレクティブはserver{ }などのブロックと言われる適用範囲に分けられます。
includeで他のファイルを読み込むことも可能で、includeもディレクティブになります。

ブロック内には設定を記述することが出来ます。
そのブロック内の記述はブロック内でのみ有効で、この範囲のことをコンテキストといいます。

書き方

以下が例になります。

server {
        listen       80;
        server_name localhost;
    }

listenは処理を待ち受けるポート番号を指定しており、server_nameはサーバーの名前を指定しています。

入れ子にも出来る

ブロックは入れ子にもすることが出来ます。

server {
        listen       80;
        server_name localhost;
        location  /  {
            try_files $uri $uri/;
        }
        location /admin/ {
            index index.php;
        }
    }

この場合、locationブロックの2つ共にserverブロック内にあるため、
serverブロックの設定はいずれのlocationブロックにも適用されます。

locationはURLのパスにマッチします。

https://www.example.com/admin にアクセスが来た場合はlocation /admin/ の設定が適用されます。

それ以外のアクセスは location / の設定が適用されます。

基本的にはURLのパスと最長一致した設定が適用されることになります。

mainコンテキスト

ブロック内に記述しない、基本ディレクティブです。

user

user nginx

master process以外を起動するユーザーを指定します。
master processはrootで起動します。

Nginxはmaster processと1つ以上のworker processを持ちます。

worker_process

worker_process 4;

起動するworker processの数を指定するためのディレクティブです。

lscpuコマンドでcpu数を確認できます。

アーキテクチャ: x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
・
・
・

Nginxではmaster processと指定した数のworker processが起動します。
そしてそのworker processがユーザーからのリクエストを処理します。

autoに設定した場合、cpuのコア数を見て自動で設定してくれます。

worker_cpu_affinity

worker_cpu_affinity 1000 0100 0010 0001;

worker processを特定のcpuコアに割り振るためのディレクティブです。

autoに設定した場合、自動で設定してくれます。

worker_rlimit_nofile

worker_rlimit_nofile 100000;

worker processが開けるファイルディスクリプタを制限するディレクティブです。

ファイルディスクリプタとは、ファイルの識別番号のことです。

eventコンテキスト

events {}に記述するディレクティブです。
イベント処理についての設定項目になります。

worker_connections

events {
  worker_connections 2048;
}

1 worker processが開ける最大コネクション数を制限するディレクティブです。

worker_rlimit_nofileの値より少なくする必要があります。

multi_accept

events {
  multi_accept on;
}

複数のリクエストを同時に受け付けるか決定するディレクティブです。
onに設定した場合、複数のリクエストを同時に受け付けます。

use

events {
  user epoll
}

コネクションの処理方法を指定するディレクティブです。
select/poll/epoll/kqueue が指定できます。

Linux2.6以上ではepollが効率的な方法で最適になります。

httpコンテキスト

http {}に記述するディレクティブです。
httpに関する設定になります。

include mime.types;

http {
  include mime.types;
}

MIMEタイプを指定します。
MIMEタイプとはファイルの種類を表す情報のことです。

default_type

http {
  default_type application/octet-stream;
}

MIMEタイプを決定できなかった際に適用されるMIMEタイプを決定するディレクティブです。

access_log

access_log  /var/log/nginx/access.log  main;

access_logの出力先を指定するディレクティブです。

sendfile

http {
  sendfile on;
}

カーネルのsendfileシステムコールを使用するかを決定するディレクティブです。
onになっている場合、カーネルにキャッシュされたデータを送信します。

tcp_nopush

http {
  tcp_nopush on;
}

sendfileがonのときに、レスポンスヘッダとファイルの内容をまとめて送信するかしないかを設定するディレクティブです。

こちらをonにすると、レスポンスヘッダとファイルの内容をまとめて送信するため、少ないパケット数で効率良く送ることができます

keepalive_timeout

http {
  keepalive_timeout 70;
}

HTTPの接続時間を設定するディレクティブです。
設定した時間まではTCPがタイムアウトしないようになります。

gzip

http {
  gzip on;
}

gzip圧縮をかけるかかけないかを設定するディレクティブです。

serverコンテキスト

server {}に記述するディレクティブです。
バーチャルサーバに関する設定を記述します。

listen

server {
 listen 80;
}

処理をするIPアドレスやポート番号を指定するディレクティブです。

server_name

http {
  server_name example.org www.example.org;
}

サーバー名を定義するためのディレクティブです。

参考文献

http://www2.matsue-ct.ac.jp/home/kanayama/text/nginx/node16.html
https://qiita.com/syou007/items/3e2d410bbe65a364b603
https://qiita.com/hclo/items/35f00b266506a707447e
https://qiita.com/mikene_koko/items/85fbe6a342f89bf53e89