nginx.confの構成のイメージ画像

nginx.confの構成

  • 公開日:2018/04/01
  • 更新日:2018/10/19
  • 投稿者:n bit

nginx.confを構成するモジュールやディレクティブのまとめ。モジュールの役割や構成を知ることでディレクティブの設定方法や内容が理解しやすくなります。

  • サーバ
  • nginx

この記事は約 分で読めます。(文字)

nginx.confの構成

nginx.conf は、ディレクティブとモジュールで構成されています。

Note

ディレクティブ(英: Directive)

ディレクティブは、プログラミングにおいてコマンドのような意味で使われる用語で、nginx.confの設定項目です。

モジュール(英: module)

モジュールは、システムなどを構成する機能的なまとまりで、nginx.confのディレクティブの集まりです。

主なモジュール

利用するモジュールの一覧表です。

モジュール名主な設定内容
Coreモジュールプロセス管理、セキュリティ、ロギングなどの基本機能の設定
Eventsモジュールイベント処理(ネットワーク機能のパフォーマンス・チューニング)の設定
HTTPモジュール HTTPサーバ関連の設定
Configurationモジュール外部ファイルのインクルードのみに利用する特殊なモジュール

各モジュール毎のディレクティブは{ }で囲まれた範囲内に記述されます。Coreモジュールは、{ }での囲みがありません。通常は各モジュールの1番上に記載します。

HTTPモジュール内には、仮想サーバを構築するServerモジュールと、さらにその中にLocationモジュールがあります。

  • HTTPモジュール > Serverモジュール > Locationモジュール

モジュール名主な設定内容
Serverモジュール仮想サーバに関する設定
Locationモジュールディレクトリ毎のドキュメントルートを設定

Configurationモジュールは特殊でincludeディレクティブを使って外部ファイルをインクルードする時のみ利用するモジュールです。

include       mime.types;
  • Configurationモジュールは任意の場所に記述できる
  • 引数にはインクルードファイルのパスを指定
  • パスの指定は絶対パス、または、相対パスで指定する
  • ワイルドカード利用可

モジュールの構成とディレクティブの定義場所は以下のようになります。

Coreモジュールのディレクティブを定義


events {
Eventsモジュールのディレクティブを定義
}

http {
HTTPモジュールのディレクティブを定義

server {
仮想サーバに関する設定を定義

location / {
ディレクトリ毎のドキュメントルートを定義
}
}
}

主なディレクティブ

主なディレクティブの解説です。ディレクティブの記述は最後に ; が付きます。

Coreモジュールのディレクティブ

Coreモジュールでは、プロセスの管理、セキュリティ、ロギングなどの設定をおこないます。Coreモジュールに記述できるディレクティブ一覧はこちらのページで確認できます。

下記はよく利用するCoreモジュールのディレクティブです。

user

userは、worker_processesの実行権限を持つユーザを設定します。

user  nginx;

worker_processes

worker_processesは、ワーカープロセス数を定義しています。

worker_processes  1;
  • 複数のプロセス処理の分散数を決める
  • デフォルトは1
  • 基本的にはCPUのコア数以下の数に留めておくべき
  • CPUが複数コアを持つ場合は増やすことで処理速度が速くなりやすい

error_log

error_logは、エラーログの出力先とファイル名を設定します。

error_log  logs/error.log;

pid

pidは、起動プロセス番号を記録するファイルを設定します。

pid        logs/nginx.pid;

Eventsモジュールのディレクティブ

Eventsモジュールでは、ネットワーク機能のパフォーマンスやチューニング等、イベント処理に関する設定をおこないます。下記はよく利用するEventsモジュールのディレクティブです。

worker_connections

worker_connectionsは、worker_processesに同時に接続できるコネクション数を設定します。worker_processesにworker_connectionsを掛け合わせた数がサーバが同時に処理できる数になります。

  • worker_processes × worker_connections = サーバが同時に処理できる数
worker_connections  1024;

HTTPモジュールのディレクティブ

HTTPモジュールでは、ネットワーク機能のパフォーマンスやチューニング等、イベント処理に関する設定をおこないます。下記はよく利用するHTTPモジュールのディレクティブです。

server_tokens

server_tokensは、nginxのバージョン番号の表示・非表示を設定します。

server_tokens off;

バージョン番号の非表示設定方法については解説は下記のページで行っています。

Serverモジュールのディレクティブ

Serverモジュールでは、仮想サーバに関する設定をおこないます。下記はよく利用するServerモジュールのディレクティブです。

allow deny

Serverモジュール単位で設定することで仮想サーバ単位(ドメイン単位)でのアクセス許可を設定します。

allow 'アクセス許可するIPアドレス';

deny all;

IPアドレスによるアクセス制限の設定方法については解説は下記のページで行っています。

listen

listenは、ポートとIPを指定します。ポートのみ指定でも可能です。

listen       80;

listen 443 ssl;

server_name

server_nameは、サーバ名を指定します。

server_name  example.jp;

server_name localhost;

return

returnは、特定のエラーコードやリダイレクト先を指定します。最初のパラメータはリスポンスコードです。300番台のエラーコード時、リダイレクト先のURL、または、リスポンスボディの中で返すテキストを二つ目のパラメータで設定できます。

returnディレクティブはServerモジュール、または、Locationモジュールの中でも利用可能です。

return 301 https://$host$request_uri;

root

rootはドキュメントルート(静的なファイルが存在するパス)を指定します。

root /usr/local/nginx/html;

client_max_body_size

client_max_body_sizeはファイルのデータサイズ上限値を指定します。「413 Request Entity Too Large」のエラー対処等に利用します。

client_max_body_size 20M;

charset

charsetはレスポンスヘッダのContent-typeを指定します。

charset UTF-8;

Locationモジュールのディレクティブ

Locationモジュールでは、仮想サーバ内のディレクトリ毎のドキュメントルートに関する設定をおこないます。下記はよく利用するLocationモジュールのディレクティブです。

allow deny

Locationモジュール単位で設定することでディレクトリ単位でのアクセス許可を設定します。

allow 'アクセス許可するIPアドレス';

deny all;

root

rootはドキュメントルート(静的なファイルが存在するパス)を指定します。

root /var/example_dir;

index

indexはURLがディレクトリにアクセスしている時(URLの最後が ” / ” の時)に呼び出すファイルを設定します。下記の設定では、index.htmlが存在する時はindex.htmlにアクセス、ない場合はindex.htmにアクセスすると言う設定です。

index  index.html index.htm;

internal

internalは、外部からのリクエストによる直接アクセスの防止を設定します。内部でのリダイレクトなど内部からのリクエストのみアクセスできるようになります。

internal;

proxy_set_header

proxy_ディレクティブは、リクエストを他のサーバに渡す設定をおこないます。

proxy_set_headerはプロキシされるサーバへ渡されるリクエストヘッダのフィールドの再定義や追加の設定をおこないます。

proxy_set_header Host $proxy_host;

proxy_pass

proxy_passはリクエストを渡すプロキシされたサーバのURLを指定します。

proxy_pass http://example.jp;

今日のdot

モジュールとディレクティブの構成を理解することでnginx.confファイルの設定がおこないやすくなります。私はディレクティブの設定をどこに記述すべきかよく迷うことがありますが、モジュールの構成を知っておくことでだいぶ記述しやすくなりました。