質問: 初めまして。初投稿です。 VPSで動かしているCentOS7のnginx(1.14.0)に関して403が返ってきてその原因が分からずにいます。 ドキュメントルートをデフォルトの"/usr/share/nginx/html"にした場合は確かに"Welcome!"のページが表示されるのですが、ドキュメントルートを"/usr/share/nginx/www"に変更すると403で拒否されてしまいます。 両ディレクトリとも中身は空(から)です。 ls -l /usr/share/nginx/ ``` drwxr-xr-x. 2 root root 38 5月 15 23:06 html drwxr-xr-x. 2 root root 6 5月 16 01:29 www ``` ls -Z /usr/share/nginx/ ``` drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0 www ``` getenforce ``` Permissive ``` confファイルでの変更箇所は/etc/nginx/conf.d/default.confのドキュメントルートの部分のみです。phpの設定などは全く行なっていません。デフォルトのままコメントアウトしています。 また"sudo nginx -t"でも異常はありません。 どうか問題の解決にご助力をお願いします。
回答: 質問に"ls -Z /usr/share/nginx/"コマンドを実行した結果が以下のように示されています。 > > drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html > > drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0 www > > > これから判ることは、 1) htmlディレクトリには"httpd_sys_content_t"というSELinuxコンテキストが付けられているのでwebサーバ(httpd)からアクセスできる。 2) wwwディレクトリには"httpd_sys_content_t"というSELinuxコンテキストが付けられていないのでwebサーバ(httpd)からアクセスできない。 という設定になっているという事です。 これがWebサーバでアクセスしたときにディレクトリの下のファイルが表示されるか、403エラーで拒否されるかの違いを生んでいます。 =対策= 「"httpd_sys_content_t"というSELinuxコンテキストが付けられていない」ことを解消すれば問題は解決します。 具体的には "chcon"コマンドを使って、SELinuxコンテキストを変更します。 (詳細はchconのヘルプなどを参照してください)