Nginxのdefault.confとは?書き方について説明
今回はNginxのdefault.confとは?書き方について説明の紹介です。
Nginxとは
Nginxとは次になります。
- Webサーバー
- リバースプロキシ
- APIゲートウェイ
- ロードバランサ
Webサーバー
静的ファイルやPHPアプリケーションのホストとして使用します。
リバースプロキシ
バックエンドの複数サーバーにリクエストを転送し、負荷分散を行います。
クライアントからのリクエストを受け取り、バックエンドサーバーに転送する役割を持ちます。
APIゲートウェイ
APIリクエストを統合的に管理・処理します。
ロードバランサ
複数のアプリケーションサーバー間でリクエストを分散します。
複数のサーバーにリクエストを分散させることで、システムの負荷を軽減します。
default.confとは?
Nginxのdefault.confは、ウェブサーバー(Nginx)で使用される設定ファイルの一つで、サーバーのデフォルトの設定を定義するために使用されます。
このファイルは通ウェブサーバーの初期設定や仮想ホストのデフォルト設定を指定するために利用されます。
default.confの役割
Nginxの初期設定として動作します。
特にカスタマイズしていない場合、default.conf がデフォルトサーバーの設定として機能します。
複数の仮想ホストを使用する場合、明示的に設定されていないリクエストを処理するサーバー設定です。
スポンサードサーチ
default.confの書き方
server {
listen; # サーバーがリクエストを待ち受けるポートを指定
index; # デフォルトのインデックスファイル(例: index.php, index.html)
server_name; # サーバーのドメイン名やホスト名を指定
root; # ドキュメントルート(公開ディレクトリのパス)
client_max_body_size; # クライアントから送信されるリクエストの最大サイズ
location / {
try_files; # リクエストされたファイルを探し、見つからない場合はフォールバック
}
location ~ \.php$ { # .phpファイルにマッチするリクエストを処理
fastcgi_split_path_info; # PHPファイルのパスと追加パス情報を分割
fastcgi_pass; # PHP-FPMサーバーのアドレスを指定(例: 127.0.0.1:9000)
fastcgi_index; # デフォルトで実行するPHPファイル(index.php)
include; # FastCGIの標準パラメータを読み込む
fastcgi_read_timeout; # PHP-FPMからの応答を待つ最大時間(秒)
fastcgi_param; # PHPに渡す環境変数: SCRIPT_FILENAME(実行するスクリプトのパス)
fastcgi_param; # PHPに渡す環境変数: PATH_INFO(追加のパス情報)
fastcgi_param; # PHPに渡す環境変数: SERVER_NAME(ホスト名)
}
}
server
仮想サーバーブロックを定義します。
Nginxは複数の仮想サーバーをホストでき、それぞれ個別の設定(ドメイン、ルート、ポートなど)を指定できます。
listen
ポート番号でHTTP接続をリッスンします。
HTTPのデフォルトポートです。Nginxはこのポートで接続を受け付けます
listen 80;
docker-composeymlを使う場合はポート番号を合わせておきましょう
ports:
- "80:80" # ホスト側:コンテナ側
80
(ホスト側のポート):- ホストマシン((あなたのローカルPCやサーバー)の81番ポートを開放します。
- クライアントは、
http://<ホストのIPまたはドメイン>:80
にアクセスする必要があります。
80
(コンテナ側のポート):- コンテナ内で動作するNginxが
listen 80;
でリクエストを受け付けます。(default.confに記載)
- コンテナ内で動作するNginxが
リクエストの流れ
- クライアント → ホストのポート
80
→ コンテナのポート80
→ Nginxがlisten 80;
で処理。
index
デフォルトのインデックスファイルを指定します。
ディレクトリにアクセスした際に index.php → index.html の順でファイルを探して表示します。
index index.php index.html;
server_name
サーバーがホストするドメイン名(ホスト名)を指定します。
リクエストのホストヘッダーが一致する場合、このブロックが処理されます。
server_name localhost;
root
サーバーのドキュメントルート(公開ディレクトリのパス)を指定します。
root /var/www/html;
リクエストがhttp://example.com/index.htmlの場合、
→ サーバーは 「/var/www/html/index.html 」を探して返します。
もし複数のプロジェクトやサービスをホストする場合にディレクトリを分けて管理します。
root /var/www/hoge/html
リクエスト: http://example.com/index.html
→ 「/var/www/hoge/html/index.html 」を探して返します。
client_max_body_size
クライアントが送信するリクエストボディの最大サイズを制限します。
client_max_body_size 500m;
上記例だと500MBまで送信できます。
location /
ルートパス /
へのリクエストを処理する設定です。
try_files
try_files は、Nginxのlocationブロック内で使用され、指定された複数のファイルやパスを順番に確認して、存在する場合にそれを返すディレクティブです。
存在しない場合は、指定されたフォールバック(デフォルト処理)を実行します。
try_files path1 path2 ... default;
path1, path2
確認するファイルやディレクトリのパスを順番に指定します。
default
すべてのパスが存在しない場合に実行されるフォールバック処理。
エラーページを返す (=404) や別のリソースに転送することができます。
こちらが基本構文です。
try_files $uri $uri/ =404;
- $uri → リクエストされたファイルが存在するか確認。
- $uri/ → リクエストされたディレクトリが存在するか確認。
- =404 → すべて存在しなければ 404エラー を返す。
フォールバックでPHPに処理を渡す方法です。
LaravelやWordPressなどのフレームワークでよく使われます。
try_files $uri $uri/ /index.php?$query_string;
- $uri → リクエストされたファイルが存在するか確認。
- http://example.com/about → /var/www/html/about
- $uri/ → ディレクトリが存在するか確認。
- http://example.com/about/ → /var/www/html/about/
- /index.php?$query_string → すべて存在しない場合、index.php にリクエストを渡し、クエリパラメータも引き継ぐ。
- http://example.com/about?key=value
→ /index.php?key=value
- http://example.com/about?key=value
例で説明すると
http://example.com/about
「 /about」 が存在しなければ 「/index.php 」が実行される。
Laravelのようなフロントコントローラにすべてのリクエストを渡します。
location ~ .php$
.php で終わるリクエストを処理する設定です(PHPファイルの実行)。
fastcgi_split_path_info
リクエストのパスを2つに分割します。
- ^(.+.php) → PHPファイル名部分
- (/.+)$ → PATH_INFO(追加のパス部分)
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass
PHPリクエストを PHP-FPMサーバー に転送します。
fastcgi_pass 127.0.0.1:9000;
- app: Dockerコンテナ名(サービス名)です。
- 9000: PHP-FPMが待機しているポート番号です。
意味
Nginxが ローカルホスト(127.0.0.1) 上のポート 9000 で待機している PHP-FPM サーバーに接続します。
対象
同じサーバー(ホスト)上で Nginx と PHP-FPM が動作している場合に使います。
ネットワーク
ローカルホスト経由なので、ローカル通信(Unixソケットに近い)となり、一般的に高速です。
fastcgi_pass app: 9000;
意味
Nginxが app というホスト名(Dockerコンテナ名や別サーバー名)に対してポート 9000 で待機している PHP-FPM に接続します。
対象
Dockerコンテナ や リモートサーバー 上でPHP-FPMが動作している場合に使います。
ネットワーク
DNS名 や コンテナ名 を通じて通信します。NginxとPHP-FPMが異なるネットワーク上でも動作します。
まとめ
項目 | 127.0.0.1:9000 | app:9000 |
---|---|---|
接続先 | ローカルホスト上のポート9000 | appというホスト名/コンテナ名 |
対象環境 | 同一サーバー内 | Docker環境やリモートサーバー |
ネットワーク通信 | ローカル通信(高速) | ネットワーク通信(DNS解決あり) |
ホスト名の解決 | 不要 | 必要(DNS名またはコンテナ名) |
用途の例 | 単体サーバー、開発環境 | マイクロサービス、Docker環境 |
fastcgi_index
デフォルトで実行するPHPファイルを指定します。
fastcgi_index index.php;
上記例だとindex.phpデフォルトで実行するファイルに指定しています。
include
FastCGIの標準設定パラメータを読み込みます。
include fastcgi_params
fastcgi_read_timeout
PHP-FPMからの応答を待つ最大時間を設定します。
長時間の処理(大きなファイルのアップロードなど)を考慮して設定します。
fastcgi_read_timeout 100
fastcgi_param
SCRIPT_FILENAME $document_root$fastcgi_script_name
実行するPHPスクリプトの絶対パスを指定します。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- $document_root: root ディレクティブで指定したパス。
- 例: root /var/www/html; の場合 → /var/www/html。
- $fastcgi_script_name: リクエストされたPHPファイル名。
- 例: http://example.com/index.php → /index.php。
$document_root$fastcgi_script_nameの結果は「/var/www/html/index.php」です。
PATH_INFO $fastcgi_path_info
PHP-FPMに追加のパス情報を渡します。
PATH_INFOは、PHPで動的ルーティングを行う際に使われる情報です。
fastcgi_param PATH_INFO $fastcgi_path_info;
http://example.com/index.php/some/path fastcgi_split_path_info ^(.+.php)(/.+)$; で分割を行います。
- $fastcgi_script_name → /index.php
- $fastcgi_path_info → /some/path
PATH_INFO $fastcgi_path_infoの用途としては次になります。
- フレームワークやPHPスクリプトがPATH_INFOを使ってルーティングする場合に有効。
- LaravelやSymfony、その他のモダンフレームワークで使われることがあります。
SERVER_NAME $host
サーバー名(ホスト名)をPHP側に渡します。
fastcgi_param SERVER_NAME $host;
まとめ
この設定は Nginx が PHPアプリケーション を動作させるための基本的な構成です。
- 静的ファイル(HTML、CSS、画像など)は root ディレクトリから直接配信します。
- PHPファイルは PHP-FPM にリクエストを転送して処理します(app:9000)。
- try_files によって、リクエストがファイルやディレクトリに存在しない場合、index.php にフォールバックします。