アクセス権限は、
・ディレクトリには実行権限
・ファイルには読取り権限
を付与すれば大丈夫なはずですが、このようなエラーが出てしまいました。
[error] 4418#0: *9 open() "/home/ec2-user/www/index.html" failed (13: Permission denied)
ディレクトリ・ファイルの所有者やグループをrootに変更してもダメです。
とりあえずの解決案
基本的に、ルートディレクトリの場所がユーザーのホームディレクトリに設定されているとエラーになります。
(というのはちょっと語弊があります。エラーになる理由はこちら)
✖ダメな例
location / { root /home/[ユーザー名]/www; index index.html; }
※デフォルトだと「/home/[ユーザー名]/」のパーミッションが700なので、701に変更すれば上記でも大丈夫
〇大丈夫な例
location / { root /www; index index.html; }
設定を変えたらnginxを再起動しましょう
sudo service nginx restart
仕組み(ホームディレクトリだとダメな理由)
ページにアクセスがあった時、nginxユーザーがドキュメントルートにアクセスし、指定のパスのファイルを読み込みます。
ちなみに、
アクセスに必要な権限は実行権限です。
読取りに必要な権限は読取り権限です。
つまりは、ルートディレクトリからドキュメントディレクトリまでのディレクトリ全てに実行権限が必要です。
index.htmlなどのファイルには読取り権限が必要です。
逆に言えば、それら権限のみあれば良いです。
nginxユーザーがドキュメントルートにアクセスするので、「その他のユーザー」にアクセス権限が必要です。
さて、何故「/home/[ユーザー名]/www;」だとダメなのかですが、
ユーザーのディレクトリ「/home/[ユーザー名]/」のパーミッションは基本的に700だからです。
基本的に、ドキュメントルートに辿り着くまでの全てのディレクトリで、「その他のユーザー」に実行権限がないといけません。
もし「/home/[ユーザー名]/www」にしても大丈夫なようにしたいとすれば、
sudo chmod 701 /home/[ユーザー名]
とする必要があります。