nginx.confの構成
- 公開日:2018/04/01
- 更新日:2018/10/19
- 投稿者:n bit
nginx.confを構成するモジュールやディレクティブのまとめ。モジュールの役割や構成を知ることでディレクティブの設定方法や内容が理解しやすくなります。
この記事は約 分で読めます。(文字)
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;
バージョン番号の非表示設定方法については解説は下記のページで行っています。
nginxのバージョン番号を非表示に変更
nginxのバージョン番号を非表示にすることでサーバのセキュリティ向上につながります。サーバのセキュリティに関わる人たちの間では賛否両論あるようですが、いずれにせよ悪意のある相手に対して少しでも情報減らしておくのは有効かと思います。その設定方法。
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ファイルの設定がおこないやすくなります。私はディレクティブの設定をどこに記述すべきかよく迷うことがありますが、モジュールの構成を知っておくことでだいぶ記述しやすくなりました。