Nginxは、open() "/etc/nginx/conf.d/foo.conf"が失敗したと言います(13:権限が拒否されました)。

Nginxは、open() "/etc/nginx/conf.d/foo.conf"が失敗したと言います(13:権限が拒否されました)。

私のコンテンツは次のとおりですls -al /etc/nginx

total 52
drwxr-xr-x.  4 root root 4096 Jul 28 04:16 .
drwxr-xr-x. 78 root root 8192 Jul 28 03:37 ..
drwxr-xr-x.  2 root root   26 Jul 28 03:55 conf.d
drwxr-xr-x.  2 root root    6 May 10 09:21 default.d
-rw-r--r--.  1 root root 1034 May 10 09:21 fastcgi.conf
-rw-r--r--.  1 root root  964 May 10 09:21 fastcgi_params
-rw-r--r--.  1 root root 2837 May 10 09:21 koi-utf
-rw-r--r--.  1 root root 2223 May 10 09:21 koi-win
-rw-r--r--.  1 root root 3957 May 10 09:21 mime.types
-rw-r--r--.  1 root root 1033 Jul 28 03:43 nginx.conf
-rw-r--r--.  1 root root  596 May 10 09:21 scgi_params
-rw-r--r--.  1 root root  623 May 10 09:21 uwsgi_params
-rw-r--r--.  1 root root 3610 May 10 09:21 win-utf

/var/log/nginx/error.log後で見た内容は次のとおりですsudo service nginx start

[emerg] 20360#0: open() "/etc/nginx/conf.d/foo.conf" failed
(13: Permission denied) in /etc/nginx/nginx.conf:33

これが私が持っているものですls -al /etc/nginx/conf.d/

$ ls -al /etc/nginx/conf.d/
total 8
drwxr-xr-x. 2 root root   26 Jul 28 03:55 .
drwxr-xr-x. 4 root root 4096 Jul 28 04:16 ..
-rw-r--r--. 1 root root  230 Jul 28 03:50 foo.conf

何が問題なの?

答え1

不明な理由でファイルアクセスなどでエラーが発生した場合は、permission deniedSELinuxと関連がある可能性があります。特に、権限の後にピリオドがある場合(関連ファイル/ディレクトリ内)、drwxr-xr-x.ラベルが誤って指定されて問題が発生する可能性があります。ls -lls -Z

まず、を実行して現在のSELinuxモードを確認する必要がありますgetenforce。表示されたら、Enforcing一時的にモードをPermissive実行に設定し、setenforce 0アプリケーションが動作していることを確認してください。

起動時の SELinux モードの設定、ファイルまたはディレクトリのラベルの上書き、ポリシーの更新などを含む永続的な修正については、ディストリビューションの SELinux ガイドラインを参照してください。CentOSガイド

答え2

SElinux全体を変えることは必ずしも正解ではありません。私は専門家ではありませんが、ポートにアクセスできない場合はファイアウォールを無効にすることと比較します。

別のクイックソリューションは、特にファイルがどこかからコピーされた場合に「ファイルのSEコンテキストを復元する」ことです。

バラよりhttps://www.thegeekstuff.com/2017/05/restorecon-examples/詳細については。

SElinuxを無効にする前に試してみる価値のあるコマンドは次のとおりです。

sudo restorecon  /etc/nginx/conf.d/
sudo restorecon  /etc/nginx/conf.d/*

答え3

selinuxを無効にするよりも良い方法は、次のコマンドを使用することです。

semanage permissive -a httpd_t

これにより、selinuxを完全に無効にすることなくnginxサービスを通過できます。

追加情報:https://www.nginx.com/blog/using-nginx-plus-with-selinux/

しかし、私はcommand chcon -v --type=httpd_sys_content_t /etc/nginx/*httpd_tを除外せずにうまくいきます。

関連情報