ファイル一覧表示の設定(autoindexディレクティブ)

広告

リクエストの URL がスラッシュ(/)で終わるディレクトリを指定した場合に、インデックスファイルが見つからないとエラーが返されます。このとき autoindex ディレクティブを設定することで、エラーを返すのではなくディレクトリに含まれるファイルの一覧を表示することができます。ここでは Nginx における autoindex ディレクティブの使い方について解説します。

autoindexディレクティブの書式

URL がスラッシュ(/)で終わるディレクトリが指定された場合、インデックスファイルとして設定されたファイルを探しますが、見つからないとエラーが返されます。 autoindex ディレクティブを設定すると、エラーを返す代わりにディレクトリ内のファイル一覧を表示することができます。 autoindex ディレクティブの書式は次の通りです。

Syntax:   autoindex on | off;
Default:  autoindex off;
Context:  http, server, location

autoindex ディレクティブは httpserverlocation コンテキスト内で使用できます。引数として、 on または off を指定します。

デフォルトでは off となっており、 on を設定するとファイルの一覧が表示されます。

server {
  autoindex on;
}

インデックスファイルが見つからなかった場合に、ファイル一覧を表示することはセキュリティ的にあまり望ましくありません。その為、仮想サーバ全体でファイル一覧の表示を許可するのではなく、ファイル一覧を表示する理由がある特定のディレクトリに対するアクセスがあった場合だけ許可するように設定するようにしてください。

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

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

http {
  server {
    index index.html;
    autoindex on;
  }
}

index ディレクティブを使ってインデックスファイルとして index.html が設定されています。ディレクトリへのアクセスがあった場合、 index.html を探しますが、見つからなかった場合 autoindex ディレクティブが on になっているため、ディレクトリ内のファイル一覧が表示されます。

http {
  server {
    autoindex off;

    location / {
      # ・・・
    }

    location /filelist/ {
      index index.html;
      autoindex on;
    }
  }
}

serverautoindexoff に設定してあるので、仮想サーバではファイル一覧が表示されることはありませんが、リクエストのパスが /filelist/ とマッチする場合、インデックスファイルが見つからなかった場合は、ファイル一覧が表示されます。

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

index ディレクティブについては「インデックスファイルの設定(indexディレクティブ)」を参照されてください。

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

動作確認

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

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

        location /blog/ {
            autoindex  off;
        }

        location /files/ {
            autoindex  on;
        }
    }
}

location コンテキストを使用して、リクエストのパスが /blog/ の場合は autoindex をオフ、 /files/ の場合はオンにしています。またどちらのディレクトリにも index.html ファイルを配置していません。

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

http://localhost/blog/

/blog/ へのリクエストについては autoindex がオフになっているので、ファイル一覧は表示されずエラー(通常は 403 Forbidden)が返されます。

autoindexディレクティブ(1)

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

http://localhost/files/

/files/ へのリクエストについては autoindex がオンになっているので、このディレクトリに含まれるファイル一覧が表示されました。

autoindexディレクティブ(2)

このように autoindex ディレクティブを設定することで、ファイル一覧を表示するかどうかを設定できます。

-- --

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

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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