ドキュメントルート
返すファイルはどこから取られているのか
前の回で 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で取り出せることを確かめます。次の回で、サイト一式をここに載せます。