RHEL7マシンを2台持っています。
Nginxとphp-fpmをインストールし、nfsマウントをセットアップしました。 nfsマウントへの読み取り/書き込みは問題なく実行でき、読み取り/書き込みが可能な別のアプリケーションサーバー(Apache Geronimo)があります。
Nginxをインストールすると、同じuidとgidを使用してNFSファイルサーバー上に作成したnginxユーザーがセットアップされます。
Nginxユーザーを使用して、nfsクライアントマウント上のファイルを一覧表示できます。ただし、nfsからnginxを使用して静的htmlファイルまたは動的phpファイルを提供しようとすると、アクセス許可エラーが発生します。
*5 stat() "/usr/depot/repository/test.php" failed (13: Permission denied)
*5 open() "/usr/depot/repository/test.html" failed (13: Permission denied)
さらに、同じ権限で/ usr/depot/testsの下にフォルダーを作成しました(nfsではありませんでした)。これは問題なく機能しました。
これがクライアントのマウント情報です。
xxx.xxx.xxx.xxx:/mnt/repository on /usr/depot/repository type nfs4 (rw,nosuid,nodev,noexec,relatime,vers=4.0,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=xxx.xxx.xxx.xxx,local_lock=none,addr=xxx.xxx.xxx.xxx)
この設定には何の問題も見当たらないので、nginxがnfs共有からファイルを読み取れない理由がわかりません。
更新
わかりました。SELinuxの再起動を無効にしたところ、修正されました。ここで問題となるのは、nginxがリモートサーバーにアクセスできるようにSELinuxを構成する方法です。
RHEL 7では、Apacheに適用されるのと同じSELinuxポリシーがnginxにも適用されます。したがって、同じブール値を使用できます。
httpd_use_nfs (off , off) Allow httpd to use nfs
WebサーバーがNFSを使用できるように、正しいブール値を設定します。
setsebool -P httpd_use_nfs 1
これはこの問題に対するGoogleでの最初の結果であるため、解決策を追加したいと思いました。
私の場合、SELinuxが無効になっていたので、そうではありませんでした。私の問題は、php-fpmがApacheとして実行されていたことでした。したがって、CentOS 7 Webサーバー(OPに従ってファイルサーバー上にnginxユーザーを作成したと仮定)では、/ etc/php-fpm.d/www.confでユーザーとグループをnginxに変更し、php-fpmを再起動します。