我刚刚安装了带有httpd、PHP 7.3和MariaDB的CentOs 7。我用以下配置了虚拟主机:
<VirtualHost *:80>
ServerName tenancy
DocumentRoot /var/www/vhosts/tenancy/public
</VirtualHost>
我让应用程序显示默认的laravel欢迎页面,但与数据库交互的每个页面都有SQLSTATE[HY000] [2002] Permission denied (SQL: select * from tenant_modules where (tenant_id = 28))
而对于每个api调用,我都得到了file_put_contents(/var/www/vhosts/tenancy/storage/framework/cache/data/44/d1/44d142505dd1a3b497197e2f459d2aec779e9ed6): failed to open stream: Permission denied
我已经将www文件夹的权限设置为777 -R
,甚至做了chcon -R -t httpd_sys_rw_content_t -R varwww
,但仍然没有任何更改。此外,我还编写了一个php函数来测试mysql-ext,它很有效。
但当我运行php artisan serve
时,它运行得很好。你知道解决方案是什么吗?
这看起来像是一个权限问题。我怀疑您的Apache用户没有在Laravel应用程序文件夹中读写的权限。
我不确定CentOs上的Apache用户/组是什么。我假设是www-data
,请根据需要更改。
免责声明:这在我的机器(Debian(上有效,但可能有一些更好的方法来设置你的Laravel应用程序权限。欢迎反馈。
-
将您的用户添加到www数据组:
sudo usermod -aG www-data youruser
-
更改您的项目用户和组所有权:
sudo chown -R youruser:www-data /var/www/your-project/
-
将您的项目文件权限更改为664:
sudo find /var/www/your-project/ -type f -exec chmod 664 {} ;
-
将您的项目目录权限更改为775:
sudo find /var/www/your-project/ -type d -exec chmod 775 {} ;
-
设置ACL权限以确保Web服务器创建的新文件具有正确的权限:
sudo setfacl -Rdm g:www-data:rw /var/www/your-project/bootstrap/cache/ sudo setfacl -Rdm g:www-data:rw /var/www/your-project/storage/logs/ sudo setfacl -Rdm g:www-data:rw /var/www/your-project/storage/framework/ sudo setfacl -Rdm g:www-data:rw /var/www/your-project/storage/app/