Nginxのドキュメントルート設定を理解して変更する
Webサーバーのルート変更ってどうにも面倒なので気が進まないので敬遠しているのですが、そんな気持ちがもう起きないようにまとめて行きたいと思います。
ドキュメントルートはnginx.confで変更
Nginxのドキュメントルートは設定ファイルnginx.confで設定されています。
僕はmacを使っているのでnginx.confは/usr/local/etc/nginx/に入っています。
この辺は環境に応じて変わってくると思いますのでヘルプコマンドで確認すると良いでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ nginx -h Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /usr/local/Cellar/nginx/1.15.8/) -c filename : set configuration file (default: /usr/local/etc/nginx/nginx.conf) -g directives : set global directives out of configuration file |
-c filename の後に続くパスが設定ファイルのパスですね。
では早速nginx.confを編集して行きましょう。nginx.confと同じフォルダにnginx.conf.defaultという名前のバックアップがすでに保存されていますのでコピー取ったりしなくても大丈夫です!
ドキュメントルート設定
ドキュメントルート変更ではnginx.confの中の以下の部分を編集して行きます。何ヶ所か似たような記述があるかと思いますがデフォルトでコメントアウトされていない部分が該当箇所です。
1 2 3 4 5 |
location / { root html; # ##### ここを変更する ##### index index.html index.htm; } |
コードの中に編集箇所を示しています。ここではURL「/」に対してどのファイルを結び付けるかを設定しています。このlocation{}はserver{}の中に書かれていますが、同じように各種ステータスコードに対応して呼び出されるhtmlファイルの場所も記載されています。
ではドキュメントルートを変更する前に変更先のフォルダを作成しておきましょう。
適当にフォルダを作り、その中にindex.htmlを作成します。デフォルトをそのままおいてもよいのですが、それだと変更されているのかがいまいちわからないと思いますので簡単なhtmlファイルを作りました。
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> test </body> </html> |
では変更先の準備が整ったところで、nginx.confを書き換えて行きます。
先に示したrootの値を変更するのですが、ここには変更先のパスを書きます。
パスは相対パスでも絶対パスでもよいのですが、いくつか注意点があります。
相対パスの場合
- 相対パスの基準となるパスはデフォルトではprefixのパスになります。prefixのパスはnginx -hで表示されるヘルプで確認できます。
絶対パスの場合
- 絶対パスでは「~/」のような省略記号を利用することができないようです。必ず指定先で「pwd」を打つなどして絶対パスを確認しましょう。僕はこれでハマりました。
さて、パスを変更し保存したら以下コマンドでNginxを再起動します。
1 2 |
nginx -s reload |
再びブラウザで開き直して変更先のindex.htmlがひらけば完了です!絶対パスを使った際の変更例を以下にあげておきます!
1 2 3 4 5 6 |
location / { root /Users/guest/Documents/test/web_server; index index.html index.htm; } |
パスの最後に「/」をつける例が多かったのですが、特になくても問題なく動きます。
デフォルト値「html」とは
rootに設定出来る値は相対パスもしくは絶対パスと書きましたが、そもそもデフォルト値の「html」ってなんなんとなりませんでしたか?
僕はきっちりなりましたので調べてみました。
結論、このhtmlはショートカットです。ショットカットのリンク先がルートディレクトリになっています。
Nginxのルートディレクトリのデフォルトはmacを使っている場合は「/usr/local/var/www/」となっています。
一方でNginxのヘルプで表示されたprefixのパス「/usr/local/Cellar/nginx/1.15.8/」に置いてあるショートカット「html」は以下のようにリンクされています。
1 |
html → ../../../var/www |
prefixのパスからディレクトリを上がって上がって上がった先からvar/wwwに降りて行くという相対パスです。
これをたどるとルートディレクトリ「/usr/local/var/www/」となるわけですね。
いちいち設定ファイルを触りたくない人に取ってはこのようにショートカットでルートディレクトリを制御するのもありですね。
まとめ
Nginxのルートディレクトリを変更する方法をまとめてきましたがいかがだったでしょうか。次回があればステータスコード毎に参照される画面のハンドリングを紹介します!
ディスカッション
コメント一覧
まだ、コメントがありません