无法以追加模式打开流或文件:无法打开流:权限被拒绝

The stream or file could not be opened in append mode: failed to open stream: Permission denied

我正在使用 NGINX 和 PHP7.4-fpm

在 RHEL 7 机器中托管一个 Laravel 项目

在我的nginx.conf中,我设置的用户如下

user nexta;

在我的 .../.../php-fpm.d/www.conf

user = nexta
group = nexta

listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nexta
listen.group = nexta
listen.mode = 0660

使用此设置,我设法 运行 Laravel 应用程序,但是,我遇到了权限被拒绝的错误

它说:

The stream or file "/home/nexta/mywebsite.com/storage/logs/laravel-2021-07-25.log" could not be opened in append mode: failed to open stream: Permission denied

我试过以下方法

  1. 设置 chown 和 chmod
sudo chown -R nexta:nexta /home/nexta/mywebsite.com
sudo chown -R nexta:nexta /home/nexta/mywebsite.com/storage
sudo chown -R nexta:nexta /home/nexta/mywebsite.com/bootstrap/cache

sudo chmod -R 775 /home/nexta/mywebsite.com/storage
sudo chmod -R 775 /home/nexta/mywebsite.com/bootstrap/cache
  1. 尝试使用 777(我知道这不是一个好的做法)
sudo chmod -R 777 /home/nexta/mywebsite.com/storage
sudo chmod -R 777 /home/nexta/mywebsite.com/bootstrap/cache
  1. 将 nginx.conf 中的用户更改为 nginx,并将站点更改为 nginx。错误仍然存​​在,而且我无法查看我的应用程序

  2. 运行 如下:

php artisan cache:clear
composer dumpautoload

我还注意到,如果我 运行 php artisan cahce:clear(注意拼写错误),这会触发错误并且应用程序能够访问日志文件,但是当应用程序通过以下方式访问时http请求,应用无法访问日志文件。

我也尝试在 php 请求中回显 whoami(使用非 laravel 应用程序),我得到以下响应

Returned with status 0 and output: Array ( [0] => nexta )

也就是说,当应用程序通过http请求执行时,用户是nexta。

在这一点上,我什至不确定是什么导致了错误。

无论出于何种原因,您都应该锁定该文件。

您可以通过以下任一方式解决 he pb:

rm <log file>

或者如果您想保留它

mv <log file> <log_file>-old

无论出于何种原因,以下命令解决了我的问题

chcon -R -t httpd_sys_rw_content_t storage

chcon -R -t httpd_sys_rw_content_t bootstrap/cache