ドキュメントルート

返すファイルはどこから取られているのか

前の回で http://localhost/ を叩くと nginx のデフォルトページが返ってきました。あのHTMLは、どこかのディレクトリに実体として置かれています。nginx が「URLで指定された道を、この場所から探す」と決めているディレクトリのことをドキュメントルートと呼びます。

Debian の nginx では、初期状態のドキュメントルートは /var/www/html です。

ls /var/www/html # index.nginx-debian.html

さきほど返ってきたのは、このファイルの中身です。

URLとファイルの対応は素直

ドキュメントルートが /var/www/html のとき、URLとファイルの対応はこうなります。

URL読まれるファイル
//var/www/html/index.html
/hello.html/var/www/html/hello.html
/works//var/www/html/works/index.html

URLのパスをそのままドキュメントルートの後ろにくっつけるだけです。末尾がスラッシュで終わっているときは、その中の index.html を探しにいきます。この決まりを覚えると、404 が出たときに「どのファイルを探して見つからなかったのか」を自分で言い当てられるようになります。

置けばすぐ出る

ドキュメントルートにファイルを置くと、それだけで配信されます。nginx を再起動する必要はありません。設定を変えたときは再読み込みが要りますが、中身のファイルを置き換えただけなら何も要りません。

echo '<h1>hello</h1>' > /var/www/html/hello.html curl http://localhost/hello.html # <h1>hello</h1>

誰が読めるかも関係する

nginx は root ではなく、権限を絞った専用のユーザーとしてファイルを読みにいきます。そのため、置いたファイルが読み取り禁止になっていると 403 が返ります。ファイルはあるのに見せてもらえない、という状態です。

curl -I http://localhost/hello.html # HTTP/1.1 403 Forbidden ← 権限が足りていない合図

404 と 403 は原因がまったく違います。前者は探しても無い、後者はあるけれど読めない。ここを取り違えると、直す場所を間違えます。

手を動かす

この回では、ドキュメントルートに自分で作ったページを置き、URLで取り出せることを確かめます。次の回で、サイト一式をここに載せます。

ヒント

  • 1. ls /var/www/html で、いま何が置かれているかを見る
  • 2. /var/www/html/hello.html を作り、ドキュメントルート という言葉を含む文を書く
  • 3. curl http://localhost/hello.html で取り出せることを確かめる
  • 4. curl -I http://localhost/nothing.html > /root/notfound.txt で、無いURLの応答を保存する

4 項目で採点します