web-dev-qa-db-ja.com

nginx.confが/ websitesから提供するように設定されている場合のNginx403エラー

私はwebsitesフォルダを/ディレクトリに作成し、Sudo chmod -R 777 /websites/で完全な権限を与えました。

その後、websitesディレクトリを指すように/etc/nginx/conf.d/default.confを変更しました。

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /websites;
        index  index.html index.htm;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /websites/nginx/html;
    }

}

しかし、サーバーのパブリックIPを参照しようとすると、403 Forbiddenが発生します。

なぜそれが起こっているのですか?どうすれば解決できますか?

私はこれをnginx error.logに持っています:

2017/08/27 20:41:03 [error] 3849#3849: *37 "/websites/index.html" is
forbidden (13: Permission denied), client: **.**.130.159, server:
localhost, request: "GET / HTTP/1.1", Host: "**.**.**.120"
1
Shilo

エラーログは非常にはっきり言っています:

  • あなたのnginxは/websites/index.htmlを読み込もうとしますが、読み込めません
  • これが、構成が原因ではなく、403エラーが発生する理由です。

13: Permission deniedのせいです。システムエラーです。したがって、nginxは適切に構成され、そのファイルを読み取ろうとしますが、できません。

次の質問は、なぜそれができないのかということです。まず、それが何をするかを確認する必要があります。 nginxが実行されているユーザー(おそらくwww-dataであるため、コマンドはSudo -u www-data /bin/bash)にSudoを送信し、そのファイルを自分で読み取ってみます(cat /websites/index.html)。

次のステップは、結果によって異なります。

@sebasthは彼のコメントに権利を持っています:

ファイル/フォルダーのアクセス許可が間違っているか、SELinuxポリシーがアクセスを許可していない可能性があります。 SELinuxを有効にしている場合は、監査ログを確認する必要があります( audit2why などのツールが役立つ場合があります)。

私は2つの最も可能性の高い結果だと思います:

  1. chmodコマンドは問題ないように見えますが、権限が正しく設定されていませんでした
  2. あなたの人生をより良くするSELinuxのものがいくつかあります。