ルートディレクトリの設定(rootディレクティブ)

広告

Nginx の root ディレクティブは、リクエストされたファイルを探す基準となるディレクトリ(ルートディレクトリ)を設定するためのものです。 Web サイトで公開するコンテンツはこのディレクトリの下に配置します。ここでは Nginx における root ディレクティブの使い方について解説します。

rootディレクティブの書式

Nginx の root ディレクティブには、ルートディレクトリを設定します。クライアントからのリクエストに応じて、指定したルートディレクトリを基準にファイルのパスが決定されます。 root ディレクティブの書式は次の通りです。

Syntax:    root path;
Default:   root html;
Context:   http, server, location, if in location

root ディレクティブは httpserverlocation コンテキスト内で使用できます。引数としてルートディレクトリのパスを指定します。

パスを絶対パスで指定する場合、ルートディレクトリを c:\nginx\html\ にする場合は c:/nginx/html となります。

root c:/nginx/html;

パスを相対パスで指定する場合は Nginx のインストールディレクトリ(環境によっては起動ディレクトリ)を基準とします。インストールしたディレクトリが c:\nginx\ だった場合、ルートディレクトリを c:\nginx\html\ にする場合は html となります。(末尾の / は不要です)。

root html;

Windows 環境の場合、相対パスであっても絶対パスであっても、パス区切りはバックスラッシュ(\)ではなくスラッシュ(/)を使用することが推奨されています。

root ディレクティブでは相対パスで指定することも可能ですが、環境による違いを避けるため、一般的には絶対パスで指定することが推奨されています。

Windows 環境ではあまり問題になりませんが、それ以外の環境で Nginx を起動する場合は、ルートディレクトリに対する権限に注意してください。 Nginx の実行ユーザーに対して、ルートディレクトリまでのすべてのディレクトリで読み取り権限と実行権限が付与されている必要があります。

rootディレクティブの設定例

root ディレクティブの設定例をいくつか見ていきます。

http {
  server {
    server_name example.com;
    root c:/nginx/http/example_com;
  }

  server {
    server_name example.jp;
    root c:/nginx/http/example_jp;
  }
}

2 つの server に対してそれぞれルートディレクトリを設定しています。

http {
  server {
    root c:/nginx/http;

    location / {
      # ・・・
    }

    location /images/ {
      root c:/nginx/data;
    }
  }
}

基本のルートディレクトリは server で設定した http がルートディレクトリですが、リクエストのパスが /images/ とマッチする場合は c:/nginx/data がルートディレクトリになります。

この例の場合、 2 つの location があり、最初の location では root ディレクティブが設定されていません。この場合は上位の server で設定したルートディレクトリが継承されます。

location コンテキストについては「リクエストされたURLのパスに応じて処理を分岐(locationコンテキスト)」を参照されてください。

実際のファイルの探し方

リクエストに対して実際にどのファイルが使用されるかというと、 root で指定されたパスの末尾に、リクエストの URL のパスをそのまま連結してファイルのパスを決定します。

例えばルートディレクトリが絶対パスで c:/nginx/html 、リクエストの URL のパスが /doc/index.html だった場合、対象となるファイルは c:/nginx/html/doc/index.html となります。

ルートディレクトリが c:/nginx/data 、リクエストの URL のパスが /images/face.png だった場合、対象となるファイルは c:/nginx/data/images/face.png となります。

なお root ディレクティブと似ている alias ディレクティブでは、location でマッチしたパスの部分を、指定したディレクトリに置き換えてファイルのパスを決定します。

動作確認

それでは実際に root ディレクティブの動作を確認してみます。 Nginx の設定ファイルである nginx.conf ファイルで http コンテキストに次のように設定しました。(必要な部分のみの抜粋です)。

http {
    server {
        root  c:/nginx/html;

        location /images/ {
            root  c:/nginx/data;
        }
    }
}

server コンテキストに対して root ディレクティブを c:/nginx/html に設定しています。このため基本のルートディレクトリは html ですが、location コンテキストを使用して、リクエストのパスが /images/ の場合は c:/nginx/data がルートディレクトリになる設定しています。

ブラウザを起動し、次の URL へアクセスします。

http://localhost/blog/index.html

/blog/index.html へのリクエストについてはルートディレクトリが c:/nginx/html なので c:/nginx/html/blog/index.html にあるファイルが返されます。

rootディレクティブ(1)

今度は次の URL へアクセスします。

http://localhost/images/index.html

/images/index.html へのリクエストについてはルートディレクトリが c:/nginx/data なので c:/nginx/data/images/index.html にあるファイルが返されます。

rootディレクティブ(2)

このように root ディレクティブを設定することで、ファイルを探す基準となるルートディレクトリを指定できます。

-- --

Nginx における root ディレクティブの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。